我该如何解决这个使用 Tensorflow 进行自动微分的问题?
How can I fix this problem of automated differentiation with 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}')
我收到以下错误:
AttributeError: 'NoneType' object has no attribute 'shape'
我该如何解决这个问题?
直接索引 y[actions[t]]
不可微分,因此您的损失张量与图表断开连接。
您可以重写代码以产生所有元素的损失,但使用输入二进制 mask
到 select 只有一个元素。这样你的最终损失连接到所有输入(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]
我需要计算已定义神经网络变量的梯度 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}')
我收到以下错误:
AttributeError: 'NoneType' object has no attribute 'shape'
我该如何解决这个问题?
直接索引 y[actions[t]]
不可微分,因此您的损失张量与图表断开连接。
您可以重写代码以产生所有元素的损失,但使用输入二进制 mask
到 select 只有一个元素。这样你的最终损失连接到所有输入(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]