2

我需要帮助来构建分类的keras模型。 我有Keras分类模型

输入:光谱的167点

输出11类调查物质。

但是在一个数据集中可以是含有多种物质的物质的幽灵(例如包含2,3,4类)。 我试过使用categorical_crossentropy,但它仅适用于非相交类。

KerasDoc

注:使用categorical_crossentropy损失的时候,你的目标应该是明确的格式(例如,如果你有10个班,每个样品的目标应该是10维向量这是所有 - 样本期望对应于样本类别的指数为1)。为了整数目标转化为分类目标,您可以使用Keras实用to_categorical:

我的代码:

model = Sequential() 
model.add(Dense(64, input_dim=167)) 
model.add(Dense(32)) 
model.add(Dense(11)) 
model.add(Activation('sigmoid')) 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) 

我尝试过很多车型,但不能得到一个好的结果。

回答

1

你或许应该sigmoidbinary_crossentropySee here

PS顺利:这是不是你的情况,但对于categorial_crossentropy,您应使用softmax激活。 softmax输出经过优化的东西,只能最大化一个类。

(如果有人想用一个好或更好的“优化器”来补充这个答案,请随意)。

+0

我试图使用binary_crossentropy但在每一个配合行动,如果随机幽灵检查,我得到的预测[0.23598771 0.24065545 0.20274314 0.20727901 0.21786793 0.20546967 0.24399549 0.23881513 0.22483987 0.24453731 0.2304628]但有效的是[0,0,0,1,0,0,1 ,0,1,1,0]。我无法得到任何真相般的结果。 – Mogost

+0

你期望从“随机幽灵”中获得真正的价值吗?如果在拟合方法中使用'verbose = 1'(或2),则可以看到模型的“损失”正在减小。另外,您可以使用'epochs = someNumber'多次重复训练。如果损失减少,模型训练正常,否则会出现问题。我认为167个数据样本对于您的模型来说太少了,无法正确地学习。我建议某种数据增强,比如用你知道的不同物质的不同组合来创建复合(而不是随机)幽灵。 –

+0

对于小数据样本,您必须牢记一件事:您可以制作模型训练并正确预测它们,但如果它们太少,您的建模就有机会记住它们而不是理解它们(它被称为overfittin )。如果模型过度拟合,训练数据看起来很好,但训练数据中不包含的数据不会有好的结果。 –