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】:

sigmoidbinary_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分类模型的主要内容,如果未能解决你的问题,请参考以下文章

Keras深度学习实战——基于ResNet模型实现性别分类

带有变压器的分类模型的 keras 模型中的错误

Keras深度学习实战——基于VGG19模型实现性别分类

在keras文本分类模型中预测时如何循环

keras调用预训练模型分类

keras中使用预训练模型进行图片分类