我已经研究了很多关于Keras的自定义丢失函数的例子。所有这些都可以概括为"只需写下来"。即,需要编写函数获取参数(y_true,y_pred)。但通常CNN需要用于反向传播的损失函数的导数。例如,如果在Caffe中实现自定义丢失,则必须编写2个函数:您自己需要的损失,以及它向后传播的导数。但在Keras看来你似乎没有必要在第二个。这种魔法是如何运作的?
答案 0 :(得分:2)
魔术被称为自动分化(AD)。 Keras建立在符号计算框架之上,即Theano,TensorFlow和/或CNTK。这些框架允许您将损失定义为符号表达式,可以在运行时轻松区分,因为整个表示是符号化的。
相比之下,Caffe是用C ++构建的,并没有使用任何符号表示框架,正如你所提到的,它需要在代码中分析地指定损失函数及其梯度。