如何使用Tensorflow解决自动差异化的问题



我需要为定义的神经网络的变量计算梯度wrt损失,损失计算正确,但梯度为None。代码如下:

variables = self.model.trainable_variables
for var in variables:
print("{}".format(var.name)
with tf.GradientTape() as tape:
y = self.model.predict(states[t])
y = tf.reshape(y, constants.NUM_ACTIONS)
loss = y[actions[t]]
grads = tape.gradient(loss, variables)
print("Information about gradients")
for var, g in zip(variables, grads):
print(f'{var.name}, shape: {g.shape}')

我得到以下错误:

属性错误:"NoneType"对象没有属性"shape"

如何解决此问题?

直接索引y[actions[t]]不可微,因此损失张量与图断开连接。

您可以重写代码以产生所有元素的损失,但使用输入二进制mask仅选择一个元素。通过这种方式,您的最终损耗连接到所有输入(states[t]mask[t](。

with tf.GradientTape() as tape:
y = self.model.predict(states[t])
y = tf.reshape(y, constants.NUM_ACTIONS)
loss = y * mask[t]

相关内容

  • 没有找到相关文章

最新更新