Keras分类模型
Posted
技术标签:
【中文标题】Keras分类模型【英文标题】:Keras classification model 【发布时间】:2017-10-25 02:34:35 【问题描述】:我需要帮助来构建用于分类的 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】:sigmoid
和 binary_crossentropy
(See here) 可能会很好用
PS:这不是您的情况,但对于categorial_crossentropy
,您最好使用softmax
激活。 softmax 输出优化为仅最大化一类的东西。
(如果有人想用一个好的或更好的“优化器”来补充这个答案,请随意)。
【讨论】:
我尝试使用binary_crossentropy,但是如果检查随机幽灵,则在每一个适合动作上,我得到预测0, 0, 1, 0, 1, 1, 0]。我无法得到任何真实的结果。 您希望从“随机幽灵”中获得真实值?如果您在 fit 方法中使用verbose=1
(或 2),您将能够看到模型的“损失”在减少。此外,您可以使用epochs=someNumber
多次重复训练。如果损失减少,则模型训练正常,如果没有,则存在问题。我认为 167 个数据样本太少,您的模型无法正确学习。我建议进行某种数据增强,例如使用已知的不同物质的不同组合创建复合(非随机)幽灵。
对于小数据样本,您必须牢记一件事:您可以让模型训练并正确预测它们,但如果它们太少,您的建模可能会改为记住它们理解它们(这被称为过度拟合)。如果一个模型过拟合,训练数据看起来很好,但是训练数据中不包含的不同数据不会有很好的结果。以上是关于Keras分类模型的主要内容,如果未能解决你的问题,请参考以下文章