我构建了一个深度学习模型,该模型接受大小为250*250*3的图像,并输出62500(250*250)个二进制向量,其中背景像素为0,感兴趣区域(ROI)像素为1。我的模型基于DenseNet121,但当我在最后一层使用softmax作为激活函数并使用分类交叉熵损失函数时,损失值为NaN。我应该在我的模型中使用什么最佳的损失函数和激活函数?二元交叉熵损失函数和分类交叉熵损失函数有什么区别?提前感谢。
回答:
我应该在我的模型中使用什么最佳的损失函数和激活函数?
- 使用
binary_crossentropy
,因为每个输出是独立的,不是互斥的,并且可以取值0或1,在最后一层使用sigmoid
。
查看这个有趣的问题/回答
二元交叉熵损失函数和分类交叉熵损失函数有什么区别?
这里有一组很好的回答来解答这个问题。
编辑1: 我的错误,应该使用binary_crossentropy
。
在快速查看代码(再次)后,我可以看到Keras使用的是:
- 对于
binary_crossentropy
->tf.nn.sigmoid_cross_entropy_with_logits
(来自TensorFlow文档):测量离散分类任务中的概率误差,其中每个类别是独立的且非互斥的。例如,可以进行多标签分类,其中一张图片可以同时包含大象和狗。
- 对于
categorical_crossentropy
->tf.nn.softmax_cross_entropy_with_logits
(来自TensorFlow文档):测量离散分类任务中的概率误差,其中类别是互斥的(每个条目只属于一个类别)。例如,每张CIFAR-10图像只标有一个标签:一张图片可以是狗或卡车,但不能同时是两者。