我修改了狗猫二分类模型,使用输出层的Sigmoid激活函数来实现多类别激活,以便为每个类别进行预测,但未能得到预期的结果。
我创建了一张同时包含狗和猫的图像。
预期结果:狗:70% 或超过70%,猫:70% 或超过70%
实际结果:狗:70%,猫:25%
为什么不能准确预测每个类别?
我在输出层没有使用softmax函数,那么为什么各个预测的总和没有超过100%?它总是保持多类别分类在1.0以下(我猜这与softmax有关,它会分配概率)。
回答:
确切地说,你想进行多标签多类别分类或简称多标签分类(即每张图像可能属于零个、一个或多个类别,例如你提到的同一张图像可能同时有猫和狗)。因此,为Dense层选择Sigmoid激活函数是正确的,因为每个类别是独立的,应该得到0到1之间的值(即对应于概率)。
然而,你还必须将损失函数从'categorical_crossentropy'
更改为'binary_crossentropy'
,因为这里你不再进行单标签多类别分类(即图像中存在狗还是猫?)。而是进行一系列的二分类(即图像中有没有猫?图像中有没有狗?)。在这种情况下,适当的损失函数应该是'binary_crossentropy'
。