我正在尝试使用tf.train.GradientDescentOptimizer().minimize(loss)
来获取损失函数的最小值。但是损失函数非常复杂,我需要使用numpy来计算值,因此我使用tf.py_func
将输出再次更改为张量,并尝试使用梯度下降来获得结果。但这会发生错误:没有为任何变量提供渐变。
def getvalue(w):
return w
train_X = np.array([1,2,3,4,5])
train_Y = np.array([34,56,78,27,96])
X = tf.placeholder("float")
Y = tf.placeholder("float")
w = tf.Variable([0.0,0,0,0,0], name="weight")
loss = tf.py_func(getvalue,[w],tf.float32)
train_op = tf.train.GradientDescentOptimizer(0.02).minimize(loss)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
temp = 1
for i in range(100):
for (x, y) in zip(train_X, train_Y):
_, w_value = sess.run([train_op, w],feed_dict={X: x,Y: y})
temp += 1
这是一个非常简单的损失函数,但是在编译时仍然会发生。没有为任何变量提供渐变。 有办法解决吗?我是否需要计算所有张量才能使用梯度下降? 预先感谢。