使用tf.py_func作为损失函数来实现梯度下降

时间:2019-03-20 17:21:27

标签: python tensorflow gradient-descent

我正在尝试使用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


这是一个非常简单的损失函数,但是在编译时仍然会发生。没有为任何变量提供渐变。 有办法解决吗?我是否需要计算所有张量才能使用梯度下降? 预先感谢。

0 个答案:

没有答案