softmax_cross_entropy_with_logits_v2 дает не обучаемый вывод - PullRequest
0 голосов
/ 14 апреля 2020

TF версия 2.1.0

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior() 


W = tf.Variable([0.5],tf.float32)
b = tf.Variable([0.1],tf.float32)
x = tf.placeholder(tf.float32)
y= tf.placeholder(tf.float32)
discounted_reward = tf.placeholder(tf.float32,shape=[4,], name="discounted_reward")
labels_ = tf.placeholder(tf.float32,shape=[4,], name="labels_")
linear_model = W*x + b

squared_delta = tf.square(linear_model - y)
loss = tf.reduce_sum(tf.multiply(squared_delta,discounted_reward))
loss2 = tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits_v2(logits = y, labels = labels_))

optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()

sess.run(init)

for i in range(1):
    sess.run(train,{x:[1,2,3,4],y:[0,-1,-2,-3],labels_:[1,2,3,4],discounted_reward:[1,2,3,4]})

print(sess.run([W,b]))
sess.close()

У меня есть код выше, в котором у нас есть 2 потери

  1. потеря
  2. потеря2

Когда я использую потери в оптимизаторе (train = optimizer.minimize(loss)), тогда он работает нормально. Но когда я использую loss2 в оптимизаторе (train = optimizer.minimize(loss2)), это из-за ошибки.

> ValueError: No gradients provided for any variable, check your graph
> for ops that do not support gradients, between variables
> ["<tf.Variable 'Variable:0' shape=(1,) dtype=float32_ref>",
> "<tf.Variable 'Variable_1:0' shape=(1,) dtype=float32_ref>",
> "<tf.Variable 'Variable_2:0' shape=(1,) dtype=float32_ref>",
> "<tf.Variable 'Variable_3:0' shape=(1,) dtype=float32_ref>",
> "<tf.Variable 'Variable_4:0' shape=(1,) dtype=float32_ref>",
> "<tf.Variable 'Variable_5:0' shape=(1

Я исследовал и понял, что это проблема с tf.trainable_variables(), и я уверен, что softmax_cross_entropy_with_logits_v2 не дает обучаемой переменной, но мой код мне нужен. Так какая помощь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...