Я пытаюсь использовать 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
Вот очень простая функция потерь, но при компиляции она все же происходит. Градиенты для любой переменной отсутствуют.Так есть ли способ решить это?Нужно ли рассчитывать все в тензор, чтобы использовать градиентный спуск?Заранее спасибо.