Использование tf.py_func в качестве функции потерь для реализации градиентного спуска - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь использовать 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


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

...