Nat*_*ion 5 python keras tensorflow
我们知道我们可以tf.stop_gradient(B)用来防止B在反向传播中训练变量。但我不知道如何止损B。
简单来说,假设我们的损失是:
loss = categorical_crossentropy + my_loss
B = tf.stop_gradient(B)
Run Code Online (Sandbox Code Playgroud)
其中既categorical_crossentropy与my_loss一切都取决于B。所以,如果我们为 设置停止梯度B,它们都将B作为常数。
但是我如何只设置my_loss停止渐变 wrt B,categorical_crossentropy保持不变?就像是B = tf.stop_gradient(B, myloss)
我的代码是:
my_loss = ...
B = tf.stop_gradient(B)
categorical_crossentropy = ...
loss = categorical_crossentropy + my_loss
Run Code Online (Sandbox Code Playgroud)
那行得通吗?或者,如何使它起作用?
好的,伙计们,如果 Q1 可以解决,我的最终任务是如何在自定义层中做到这一点?
说得具体,假设我们有一个自定义层,其中有训练的权重A和B和自我损失my_loss只有这一层。
loss = categorical_crossentropy + my_loss
B = tf.stop_gradient(B)
Run Code Online (Sandbox Code Playgroud)
如何使w模型损失(MSE、交叉熵等)B仅可训练,并且仅可训练my_loss?
如果我再补充一点tf.stop_gradient(w),那将停止w为my_loss唯一或模型的最终损失?
| 归档时间: |
|
| 查看次数: |
2149 次 |
| 最近记录: |