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 потери
- потеря
- потеря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
не дает обучаемой переменной, но мой код мне нужен. Так какая помощь?