我正在尝试使用tf.GradientTape计算梯度.
当我尝试使用loss和Model.variables(tf.keras.Model)作为输入来执行此操作时,结果将返回None数组.
我究竟做错了什么?
我使用的tensorflow版本是1.9.
Model = CubeValModel(TrainingCurves)
LearningRate = 0.0005
Trainope = tf.train.AdamOptimizer(LearningRate, name="MainTrainingOpe")
for i in range (5):
with tf.GradientTape() as t:
Predictions = tf.nn.softmax(Model.FinalFC, name="softmaxPredictions")
Cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=Predictions, labels=TrainingLabels, name="CrossEntropy")
Loss = tf.reduce_mean(Cross_entropy, name="Loss")
print (Loss)
print (Model.variables)
Gradients = t.gradient(Loss, Model.variables)
print(Gradients)
输出:
tf.Tensor(0.84878147, shape=(), dtype=float32)
[<tf.Variable 'LayerBlock1/Weights1:0' shape=(1, 3, 1, 3) dtype=float32, numpy=
[None, None, None, None, None, None, None, None, None]
解决方法:
我假设您正在使用TensorFlow急切执行,不是吗?
如果我没记错的话,在tf.GradientTape()下,您应该调用用于计算模型的方法,而不是调用其成员之一.该计算执行将允许t找出其以后需要生成的梯度.
我希望这有帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。