我正在尝试使用 tensorflow 2 api 实现多元回归。
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame({'A': np.array([100, 105.4, 108.3, 111.1, 113, 114.7]),
'B': np.array([11, 11.8, 12.3, 12.8, 13.1,13.6]),
'C': np.array([55, 56.3, 57, 58, 59.5, 60.4]),
'Target': np.array([4000, 4200.34, 4700, 5300, 5800, 6400])})
X = df.iloc[:, :3].values
Y = df.iloc[:, 3].values
plt.scatter(X[:, 0], Y)
plt.show()
X = tf.convert_to_tensor(X, dtype=tf.float32)
Y = tf.convert_to_tensor(Y, dtype=tf.float32)
def poly_model(X, w, b):
mult = tf.matmul(X, w)
pred = tf.add(tf.matmul(X, w), b)
return pred
w = tf.cast(tf.Variable(np.random.randn(3, 1), name='weight'), tf.float32)
b = tf.Variable(np.random.randn(), name='bias')
model = poly_model(X, w, b)
cost = tf.reduce_sum(tf.square(Y - model))
train_op = tf.optimizers.SGD(0.001)
train_op.minimize(cost, var_list=[w])
在最后一行它抛出了我:
tensorflow.python.framework.ops.EagerTensor' object is not callable
另外,我有点困惑:
1)如何在不使用Session的情况下进行。只需执行以下操作:output = train_op(X)
?
2)我需要使用tf.GradientTape() as tape
还是仅用于图表?
-- 错误跟踪 --
TypeError Traceback (most recent call last)
<ipython-input-1-ffbbbe1a3709> in <module>()
32 train_op = tf.optimizers.SGD(0.001)
33
---> 34 train_op.minimize(cost, var_list=[w])
~/anaconda3/envs/dpl/lib/python3.6/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py in minimize(self, loss, var_list, grad_loss, name)
294 """
295 grads_and_vars = self._compute_gradients(
--> 296 loss, var_list=var_list, grad_loss=grad_loss)
297
298 return self.apply_gradients(grads_and_vars, name=name)
~/anaconda3/envs/dpl/lib/python3.6/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py in _compute_gradients(self, loss, var_list, grad_loss)
326 with backprop.GradientTape() as tape:
327 tape.watch(var_list)
--> 328 loss_value = loss()
329 grads = tape.gradient(loss_value, var_list, grad_loss)
330
TypeError: 'tensorflow.python.framework.ops.EagerTensor' object is not callable