Keras中的反向传播?

24

有人可以告诉我Keras中的反向传播是如何做的吗?我读到说在Torch中很容易,在Caffe中很复杂,但是我找不到关于如何在Keras中实现它的任何信息。我正在Keras中实现自己的层(我是个非常初级的学习者),想知道如何进行反向传播。

提前感谢您。

1个回答

31

你根本不需要手动进行反向传播(除非你正在创建自定义训练循环,这只适用于高级使用情况)。

Keras会自动进行反向传播。你所需要做的就是使用其中一种fit方法对模型进行训练。

你只需要注意以下几点:

  • 你想要用反向传播更新的变量(也就是权重),必须在自定义层中使用self.add_weight()方法在build方法中定义。详见编写你自己的Keras层
  • 你所进行的所有计算都必须使用基本操作符,如+-*/backend函数。TensorFlow/Theano/CNTK函数也受支持。
  • 你所使用的函数必须是可微分的(也就是说,对于使用常量结果的函数,反向传播将失败)。

这就是你需要让自动反向传播正常工作的全部内容。

如果你的层没有可训练的权重,你不需要使用自定义层,而是使用Lambda层(仅进行计算,没有可训练的权重)。


非常感谢您的快速回复,丹尼尔!您可以向我展示如何调用这个函数吗? - Tassou
2
什么函数?反向传播?当您将模型拟合到某些数据时,它会自动发生。在Keras的“model”中,训练方法是“fit”。 - Daniel Möller
@DanielMöller,我有类似的问题,我想在每次反向传播时对梯度进行二值化(量化)...有没有办法在Keras中实现这一点...在TensorFlow中可能是可行的,我相信。 - Eliethesaiyan
2
你需要一个定制的优化器。我建议你从Keras SGD源代码中复制它并进行更新。 - Daniel Möller
1
更新给@Eliethesaiyan,你也可以打开急切模式并创建自定义训练循环:https://www.tensorflow.org/tutorials/customization/custom_training_walkthrough - Daniel Möller
@DanielMöller,谢谢,看起来现在已经更新了。 - Eliethesaiyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接