Как я могу решить эту ошибку в коде линейной регрессии с помощью tensorflow 2.0? - PullRequest
0 голосов
/ 01 августа 2020

Я изучал линейную регрессию с помощью tensorflow 2.0 и намеревался использовать оптимизатор SGD в инструменте keras. Вот мой код.

import tensorflow as tf
from tensorflow import keras

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib inline

x_train = [1,2,3]
y_train = [1,2,3]

W = tf.Variable(np.random.normal([1]),name='weight')
b = tf.Variable(np.random.normal([1]),name='bias')

cost = tf.reduce_mean(tf.square(x_train*W + b-y_train))

opt = keras.optimizers.SGD(learning_rate=0.1)
fig=plt.grid()
plt.scatter(x_train,y_train)
plt.xlabel('x')
plt.ylabel('y')
for i in range(20):
    plt.title('hypothesis: epoch {}'.format(i+1))
    plt.plot(hypothesis, 'r.-',label='hypothesis')
    plt.legend(loc='best')
    opt.minimize(cost, var_list=[W,b])

Я намеревался напечатать график для каждой отдельной эпохи, но я получил эту ошибку в последнем предложении l oop.

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-be257fb20d71> in <module>
      8     plt.plot(hypothesis, 'r.-',label='hypothesis')
      9     plt.legend(loc='best')
---> 10     opt.minimize(cost, var_list=[W,b])

~\anaconda3\envs\tensorflow\lib\site-packages\tensorflow_core\python\keras\optimizer_v2\optimizer_v2.py in minimize(self, loss, var_list, grad_loss, name)
    315     """
    316     grads_and_vars = self._compute_gradients(
--> 317         loss, var_list=var_list, grad_loss=grad_loss)
    318 
    319     return self.apply_gradients(grads_and_vars, name=name)

~\anaconda3\envs\tensorflow\lib\site-packages\tensorflow_core\python\keras\optimizer_v2\optimizer_v2.py in _compute_gradients(self, loss, var_list, grad_loss)
    349       if not callable(var_list):
    350         tape.watch(var_list)
--> 351       loss_value = loss()
    352     if callable(var_list):
    353       var_list = var_list()

TypeError: 'tensorflow.python.framework.ops.EagerTensor' object is not callable

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 01 августа 2020

Ваша стоимость: cost = tf.reduce_mean(tf.square(x_train*W + b-y_train)) на самом деле является тензором, но аргумент стоимости в opt.minimize(cost, var_list=[W,b]) требует функции.

Итак, вы должны создать стоимость как функцию вместо тензора, вызвав лямбда:

cost = lambda: tf.reduce_mean(tf.square(x_train*W + b-y_train))

И вы должны тренироваться для более длительных эпох.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...