用于多类分类的最佳 Keras 模型是什么?
-
16-10-2019 - |
题
我正在研究,需要对三个事件之一进行分类 WINNER=(win
, draw
, lose
)
WINNER LEAGUE HOME AWAY MATCH_HOME MATCH_DRAW MATCH_AWAY MATCH_U2_50 MATCH_O2_50
3 13 550 571 1.86 3.34 4.23 1.66 2.11
3 7 322 334 7.55 4.1 1.4 2.17 1.61
我当前的模型是:
def build_model(input_dim, output_classes):
model = Sequential()
model.add(Dense(input_dim=input_dim, output_dim=12, activation=relu))
model.add(Dropout(0.5))
model.add(Dense(output_dim=output_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adadelta')
return model
- 我不确定这对于多类分类来说是正确的
- 二元分类的最佳设置是什么?
编辑:#2 - 就这样?
model.add(Dense(input_dim=input_dim, output_dim=12, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(output_dim=output_classes, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adadelta')
解决方案
您的选择 activation='softmax'
在最后一层并编译选择 loss='categorical_crossentropy'
适合模型预测多个互斥类。
对于更一般的选择,很少有“正确”的方式来构建架构。相反,这应该是您使用不同元参数(例如层大小、层数、丢失量)进行测试的内容,并且应该是结果驱动的(包括您对训练时间/内存的资源使用可能有的任何限制)使用等)。
使用交叉验证集来帮助选择合适的架构。完成后,为了更准确地衡量模型的总体性能,您应该使用单独的测试集。为此,应使用从训练集中与 CV 集分开的数据。合理的分割可能是 60/20/20 训练/CV/测试,具体取决于您拥有多少数据,以及您需要报告准确的最终数字多少。
对于问题#2,您可以只拥有两个带有类似于现在的 softmax 最终输出的输出,或者您可以 最终的 有一个输出的层, activation='sigmoid'
和 loss='binary_crossentropy'
.
纯粹出于对这些数据可能起作用的直觉,我建议尝试使用 'tanh'
或者 'sigmoid'
隐藏层中的激活,而不是 'relu'
, ,我还建议增加隐藏神经元的数量(例如100)并减少辍学量(例如0.2)。警告:对神经网络架构的直觉并不科学。尝试一下,测试一下。