问题描述
我在Keras中使用自定义损失功能遇到麻烦。任务看起来相当简单,但是由于意外行为而无法进行。想法是将tf.keras.losses.SparseCategoricalCrossentropy
与一些额外功能一起加入。首先,我想确认一下,如果仅在自定义损失函数中使用稀疏分类交叉熵,那将不会改变网络训练。
model.compile(loss="sparse_categorical_crossentropy",...)
这没问题。网络学习并显示出培训和验证准确性方面的改进。
但是,当我定义自定义损失
时def new_loss(y_true,y_pred):
ls = tf.keras.losses.SparseCategoricalCrossentropy()
return ls(y_true,y_pred)
网络无法训练。
训练和验证准确性降低到0.09 ...,没有适当训练的希望。
此外,如果我执行以下操作
model.compile(loss= tf.keras.losses.SparseCategoricalCrossentropy(),...)
网络训练有素。
Tensorflow版本为
tf.__version__ = '1.15.3'
Keras版本是
keras.__version__ = '2.2.4-tf'
解决方法
我用你的损失函数替换了“sparse_categorical_crossentropy”,它在我的例子中工作得很好,你设法让它工作了吗?
model.compile(loss=new_loss,...)