【发布时间】:2018-06-14 17:33:02
【问题描述】:
我研究了很多 Keras 自定义损失函数的示例。所有这些都可以概括为“随便写”。即,需要编写带参数的函数(y_true,y_pred)。但通常 CNN 需要一个损失函数的导数来进行反向传播。例如,如果您在 Caffe 中实现自定义损失,则必须编写 2 个函数:您需要的损失本身,以及反向传播的导数。但是在 Keras 中,您似乎不需要第二个。这种魔法是如何起作用的?
【问题讨论】:
我研究了很多 Keras 自定义损失函数的示例。所有这些都可以概括为“随便写”。即,需要编写带参数的函数(y_true,y_pred)。但通常 CNN 需要一个损失函数的导数来进行反向传播。例如,如果您在 Caffe 中实现自定义损失,则必须编写 2 个函数:您需要的损失本身,以及反向传播的导数。但是在 Keras 中,您似乎不需要第二个。这种魔法是如何起作用的?
【问题讨论】:
这个魔法被称为自动微分(AD)。 Keras 建立在符号计算框架之上,即 Theano、TensorFlow 和/或 CNTK。这些框架允许您将损失定义为符号表达式,可以在运行时轻松区分,因为整个表示是符号的。
相比之下,Caffe 是用 C++ 构建的,不使用任何符号表示框架,而且正如您所说,它需要在代码中解析地指定损失函数及其梯度。
【讨论】: