关键点
- 网络部分
- 在神经网络的最末端将softmax激活函数改为sigmoid激活函数。
- 将损失函数由分类交叉熵替换为二元交叉熵。方法是计算一个样本各个标签的损失(输出层采用sigmoid函数),然后取平均值。把一个多标签问题,转化为了在每个标签上的二分类问题。
- 正像是一个神经网络没法预测出一个它未曾训练过的类,你的神经网络没法预测出它未曾见过的多类标签组合。这个特性是由于神经网络内部神经元的激活函数。
如果你的神经网络同时经过:(1)黑色裤子(2)红色衬衫的训练,现在你希望预测“红色裤子”(你的数据集中没有“红色裤子”的图片),用于检测“红色”和“裤子”的神经元将会发生变化,但由于神经网络在之前从没见过这些数据/激活的组合,一旦他们到达了全连接层,你的输出预测就很有可能出错了(例如你可能会见到“红色”或者是“裤子”,但不太可能会同时见到这两个)。
再次重申,你的神经网络不能预测出它之前未曾训练过的数据(而且你也不该期望它能够预测出)。当你在训练你自己的多标签分类Keras神经网络时,请牢记这一点。