我构造的顺序keras模型35000个输入样本和20个预测,测试数据输出类分布为:Keras多类别预测输出被限制为一个类
- Class_0 = 5.6%
- Class_1 = 7.7%
- Class_2 = 35.6%
- Class_3 = 45.7%
- Class_4 = 5.4%
利用(np_utils.to_categorical)将输出转换为二元类矩阵后,训练精度约为54%,当我对测试数据(15000个样本)进行模型拟合时,所有的预测(100%)碰巧是针对同一类这是class_3“在训练输出中最高的发生率”,这种偏见的原因是什么,并且没有针对其他类的单一预测?如何使模型对预测较少的类敏感,并提高准确度,特别是如果训练数据的一致性较低,如1 - 3%。
model = Sequential()
model.add(Dense(40, input_dim=20, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='relu'))
model.add(Dense(5, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
model.fit(X, Y, epochs=500, verbose=1)
vikasreddy,ty的建议。你能否更详细地阐述修改损失函数以给予更多的权重,以及对于问题的第一部分,解释为什么网络忽略预测剩余(54.3%)的其他类别,特别是具有大量观察的类别_2 %)?? – Ray
我能想到的一个原因是,模型不够复杂,不能完全最小化损失函数,因此它保持在局部最小值,这恰好可以预测所有的例子在class_3中。 – vikasreddy
由于加权损失函数的实现请参考https://github.com/fchollet/keras/issues/2115#issuecomment-204060456 – vikasreddy