【发布时间】:2023-04-02 22:33:01
【问题描述】:
我目前正在尝试使用 TensorFlow 2 中的 GradientTape() 和 batch_jacobian 在我的训练循环中计算雅可比矩阵。遗憾的是,我只获得了 None 值...
我目前的尝试是这样的:
for step, (batch_x, batch_y) in enumerate(train_data):
with tf.GradientTape(persistent=True) as g:
g.watch(batch_x)
g.watch(batch_y)
logits = self.retrained(batch_x, is_training=True)
loss = lstm.cross_entropy_loss(logits, batch_y)
acc = lstm.accuracy(logits, batch_y)
avg_loss += loss
avg_acc += acc
gradients = g.gradient(loss, self.retrained.trainable_variables)
J = g.batch_jacobian(logits, batch_x, experimental_use_pfor=False)
print(J.numpy())
self.optimizer.apply_gradients(zip(gradients, self.retrained.trainable_variables))
【问题讨论】:
-
self.retrained是内置函数还是您定义的?你解决了吗?我有类似的问题,但对于tape.gradient(),原因是我定义了自己的损失函数。 -
是的 - 我使用了我自己的损失函数 :) 使用 tf 中实现的一个可以解决它。非常感谢!
标签: tensorflow machine-learning deep-learning lstm