【问题标题】:Support Vector Machine in Torch7Torch7 中的支持向量机
【发布时间】:2015-09-08 01:41:14
【问题描述】:

我的模型基于以下教程:

https://github.com/torch/tutorials/tree/master/2_supervised

在最后阶段,对从 CNN 提取的特征使用神经网络。我想在最后一层使用 SVM。如何将它添加到我现有的模型中?

在一些论文中表明,作为 CNN 的最后一层,SVM 似乎比神经网络运行得更好,因此我想尝试一下以提高模型的准确性。支持向量机也可以用于神经网络缺乏的一类分类。我最终需要一个类分类器,因此需要在 CNN 中添加一个支持向量机。

请帮忙

【问题讨论】:

  • 这不是官方答案,但您是否考虑过推出自己的 SVM 模块?您需要做的就是编写自己的前向和后向消息函数...从概念上讲,最难的部分是对响应函数进行衍生...
  • 另外,我确定你看到了这个,但是有一个专门针对这个问题的 google 小组问题(有点):groups.google.com/forum/#!topic/torch7/bEDxJgaDlj8
  • 请检查我的编辑——我可能刚刚取消了它“可接受”的资格,对不起!

标签: neural-network svm torch


【解决方案1】:

编辑:自从你cannot code a (linear) SVM as a complete module以来,我的旧答案完全是垃圾。相反,您可以将 SVM 视为

在输出节点上具有线性激活并通过铰链损失训练的 1 层 NN

(请参阅已接受答案的 cmets。)

这意味着在 Torch 中,您可以使用类似的东西模拟一个(线性)SVM

linearSVM = nn.Sequential()
linearSVM:add(nn.Linear(ninputs, 1))
criterion = nn.MarginCriterion()

Torch7 google code mailing list...中查看以下问题...

【讨论】:

  • 非常感谢!!我挖了一点,发现在 CNN 上添加 SVM 的一种方法是使其完全独立于 CNN。像往常一样训练 CNN,一旦训练完毕,使用从 CNN 提取的特征在训练集上训练 SVM。这避免了“手动”更新权重和计算梯度的程序。但这仍然没有解决一类 SVM 的问题——因为我仍然需要为 CNN 抽取负面示例。另一种方式绝对是你建议的方式,但它确实似乎有点太复杂了,我无法处理!
  • 我打算尝试扩展我的代码示例以完全定义 linearSVM 模块,但我意识到这种方法可能存在根本缺陷:我认为您不能使用 back 来训练 SVM -prop,因为转发消息的导数对于所有输入和参数始终为 0...
猜你喜欢
  • 2014-05-12
  • 2011-06-25
  • 2016-09-25
  • 2012-01-31
  • 2019-06-03
  • 2013-12-31
  • 2013-12-30
相关资源
最近更新 更多