首页 > 解决方案 > 如何在 keras 中使用 categorical_hinge 损失以便在最后一层使用 SVM 进行训练?

问题描述

我想使用 SVM 训练 CNN 在最后一层进行分类。我知道 categorical_hinge 是最好的损失函数。我有 6 个类要分类。我的模型如下图所示:

model = Sequential()    
model.add(Conv2D(50, 3, 3, activation = 'relu', input_shape = train_data.shape[1:]))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(50, 3, 3, activation = 'relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(50, 3, 3, activation = 'relu'))

model.add(Flatten())
model.add(Dense(400, activation = 'relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation = 'relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation = 'sigmoid'))

网络、数据处理或损失函数有问题吗?

如图所示,模型在某个点之后没有学到任何东西 我应该怎么做?

标签: machine-learningkerasdeep-learningsvmdata-science

解决方案


你的模型只有一个输出神经元,这不可能适用于 6 个类。你的模型的输出应该有 6 个神经元。此外,您的模型的输出应该没有激活函数,以便生成分类铰链可以使用的 logits。

请注意,分类铰链是最近(2-3 周前)添加的,所以它很新,可能没有多少人测试过。


推荐阅读