Keras:使用hinger或分类铰链实现SVM?

Keras:使用hinger或分类铰链实现SVM?,keras,svm,Keras,Svm,我有一个层神经网络做一些事情,我想在最后一个支持向量机。我在Google上搜索了stack exchange,它似乎很容易在keras中使用损失函数铰链或分类铰链实现。然而,我不知道该用哪一个 我的示例将被分类为一个二进制类,类0或类1。因此,我可以通过以下方式进行: 方法1(使用铰链)或(使用分类铰链): 标签的形状为(,2),值为0或1表示它是否属于该类 nb_classes = 2 model.add(Dense(nb_classes), W_regularizer=l2(0.01)) m

我有一个层神经网络做一些事情,我想在最后一个支持向量机。我在Google上搜索了stack exchange,它似乎很容易在keras中使用损失函数铰链或分类铰链实现。然而,我不知道该用哪一个

我的示例将被分类为一个二进制类,类0或类1。因此,我可以通过以下方式进行:

方法1(使用铰链)或(使用分类铰链):

标签的形状为(,2),值为0或1表示它是否属于该类

nb_classes = 2
model.add(Dense(nb_classes), W_regularizer=l2(0.01))
model.add(Activation('linear'))

model.compile(loss='hinge OR categorical_hinge ??,
              optimizer='adadelta',
              metrics=['accuracy'])
那么该类是两个输出节点中具有较高值的节点

方法2(使用铰链):

第一位评论者提到,铰链应该是二进制铰链,对于“否”或“是”,标签必须是-1或1,最后一个SVM层的激活应该是tanh,只有1个节点。 所以它看起来应该是这样的,但是标签将是(,1)形状,值为-1或1

model.add(Dense(1), W_regularizer=l2(0.01))
model.add(Activation('tanh'))

model.compile(loss='hinge',
              optimizer='adadelta',
              metrics=['accuracy'])

那么,哪种方法是正确的或更可取的呢?我不确定该使用什么,因为在线上有多个答案,而且keras文档中没有关于铰链和分类铰链损失函数的任何内容。谢谢大家!

可能有点晚了,但这是我的答案

您可以通过多种方式执行此操作:

因为你有两个类,这是一个二进制问题,你可以使用正常的铰链。 架构只需要输出1个输出-1和一个,如您所说

您也可以使用最后一层的输出2,您只需输入标签的一个热编码,然后使用分类铰链

根据激活,一个线性层和一个tanh都将生成一个SVM,tanh将被平滑


我建议将其设置为二进制,并使用tanh层,但尝试这两种方法看看效果如何

你发现上面哪种方法对二元古典小说更有效了吗?