python - 为什么我的 Keras 自定义损失函数不起作用?
问题描述
我写了一个平方损失函数来对一个热编码数据进行分类
def squared_categorical_loss(y_true, y_pred):
return K.mean(K.square(1.0 - K.sum(y_true * y_pred, axis=(1))))
在给定 numpy 数组示例时有效,例如
y_true = np.asarray([[1,0,0],[0,1,0]])
y_pred = np.asarray([[0.5,0.2,0.3],[0.4,0.6,0]])
squared_categorical_loss(y_true, y_pred)
上面的示例返回一个值为 0.205 的张量,它是 (1-0.5)^2 和 (1-0.6)^2 的平均值,这是期望的结果,并且应该是一个通常与准确性相关的可优化损失函数,但当我将其应用于 TensorFlow 模型时
model.compile(optimizer='adam',
loss=squared_categorical_loss,
metrics=['accuracy'])
损失减少到极小的值,而训练准确度保持在 50% 以下,这是不可能的,因为如果准确度不超过 50%,就无法在数学上实现低于 0.125 的损失,那么我的实现有什么问题?谢谢!
解决方案
只有当 y_pred 被归一化(总和等于 1)时它才会起作用。
我认为您忘记在模型的最后一层应用 softmax。
推荐阅读
- java - FirebaseUI RecyclerView 如何将元素添加到定义的位置
- jenkins - 詹金斯 - 设置向导空白?
- python - 使用 np.log() 函数时如何保持某些值不变
- android - React Native 图像不会显示在某些移动设备上
- python - 可视化词袋时出现 Seaborn 错误
- c# - 为什么我的 oxi 文件仍在 IN 文件夹中,并在数据库中集成了 2 次甚至更多?
- c++ - 解压附加的压缩字符串
- react-native - TypeError:无法读取 react-native 中未定义的属性“配置”
- qt - 在 QML 中将多个矩形绘制到图像中
- python - Python中Docx文件的加密