最后更新于
最后更新于
keras中, 如果不是特别的任务或网络结构, 往往不需要自己显式地定义损失(这点与tensorflow
不同). 例如对于多分类任务, 往往在输出层使用softmax, 再使用交叉熵作为损失函数. 对于keras, 在搭建模型时, 只需要得到最后的概率输出logit
, 然后在model.compile
方法中指定loss
参数为categorical_crossentropy
, 然后fit训练即可.
keras.losses
中封装了keras中所有的损失函数, 涵盖了各种任务常用的损失函数, 基本可以满足常见的任务需求.
当keras中的损失函数不能满足训练的需要时, 就需要自定义损失函数, 然后融入到keras框架中使用即可.
keras中的损失函数, 例如交叉熵函数定义为:
即拥有两个参数, 前者y_true
为真是标签, 后者y_pred
为预测的概率值. 因此, 新定义的函数必须满足有且只有y_true和y_pred这两个参数.
例如计算, 对应的公式为:
计算loss值时只使用到了真实值和预测值, 因此可以使用如下的损失函数:
另外再举一个例子, 还可以对经常使用的softmax-交叉熵损失进行优化, 这种优化可以防止过拟合, 详情参见参考资料中的第一部分.
分别是二分类和多分类版本. 多分类版本还有个BUG, alpha
应当改为每个类别对应不同值, 否则不同类别缩放比例相同, 参数就失去了作用. 不过这也大大增加了调参与训练的难度.