运行深度神经网络时遇ValueError:无梯度提供问题求助
解决TensorFlow中"No gradients provided for any variable"错误
嘿,这个问题我之前也踩过坑!你代码里的问题其实是个很容易犯的小错误,咱们来一步步理清:
错误根源
在你的train_neural_network函数里,这一行损失函数的参数顺序搞反了:
cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(labels=prediction,logits=y) )
tf.nn.softmax_cross_entropy_with_logits的参数规则是:
logits:对应模型输出的预测值(也就是你的prediction)labels:对应真实的标签数据(也就是你的y)
你现在把两者写反了,导致损失函数和模型的权重变量之间没有建立正确的依赖关系,TensorFlow自然找不到可以计算梯度的路径,也就抛出了这个错误。
修正方案
只需要调换参数顺序即可:
cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y) )
额外小提示
另外要注意:tf.nn.softmax_cross_entropy_with_logits在TensorFlow新版本中已经被标记为弃用,推荐使用兼容性更好的tf.nn.softmax_cross_entropy_with_logits_v2,用法完全一致:
cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits_v2(logits=prediction, labels=y) )
修正后再运行代码,应该就能正常计算梯度并训练模型了!
内容的提问来源于stack exchange,提问作者Raheel Siddiqi
相关产品推荐
相关产品推荐

