【问题标题】:Keras: Implementing SVM using hinger or categorical hinge?Keras:使用铰链或分类铰链实现 SVM?
【发布时间】:2019-01-14 20:10:49
【问题描述】:

我有一个可以做一些事情的层神经网络,最后我想要一个 SVM。我在堆栈交换上进行了谷歌搜索和搜索,似乎使用损失函数铰链或 categorical_hinge 在 keras 中很容易实现它。但是,我对使用哪一个感到困惑。

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

方法一https://github.com/keras-team/keras/issues/2588(使用铰链)或How do I use categorical_hinge in Keras?(使用categorical_hinge):

标签的形状为 (,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 https://github.com/keras-team/keras/issues/2830(使用铰链):

第一个评论者提到铰链应该是 binary_hinge 并且标签必须是 -1 或 1 表示“否”或“是”,并且最后一个 SVM 层的激活应该是只有 1 个节点的 tanh。 所以它应该看起来像这样,但标签将是 (,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 文档根本不包含铰链和 categorial_hinge 损失函数。谢谢!

【问题讨论】:

  • 你有没有发现以上哪种方法更适合二元分类?

标签: keras svm


【解决方案1】:

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

您可以通过多种方式做到这一点:

由于您有 2 个类,这是一个二元问题,您可以使用普通铰链。 然后架构将只需要输出 1 个输出 -1 和一个如您所说的。

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

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

我建议将其设为二进制并使用 tanh 层,但请尝试这两种方法以查看哪些方法有效。

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 2019-09-09
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多