0

所以我有一个模型(A),我正在使用自定义训练程序进行训练。它由第二个模型 (B) 支持。这当然意味着我必须使用tf.GradientTape并自己计算 + 应用渐变。

但是,它没有按预期工作,而是作为gradients,只返回一个列表 [None, None ...] 。代码片段:

with tf.GradientTape() as tape:
  outputs = model(input_batch, training=True)  # output of model A
  critic_output = critic_model(outputs, training=True)  # output of model B
  loss = critic_loss(critic_output, 1)  # loss of model B with input generated by A
  model_grads = tape.gradient(loss, model.trainable_variables)  # returns [None, ...]

模型是正确的,我测试了它们的各个方面。这不是我第一次使用梯度磁带来计算梯度。然而,这一次,梯度调用只返回一个“无”列表,而不是返回张量列表。我不知道发生了什么事。

我还查看了一篇文章,并使用 .watch() 将每个变量添加到渐变磁带,它没有改变任何东西。所有其他梯度的计算都没有问题。我几乎尝试了一切,迫切需要帮助。

4

0 回答 0