【发布时间】: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 损失函数。谢谢!
【问题讨论】:
-
你有没有发现以上哪种方法更适合二元分类?