在CNN网络中使用不同内核的SVM作为最后一层。

问题描述 投票:0回答:1

我想在一个多分类问题中,用pytorch用SVM替换CNN网络的最后一个全连接层。我做了一些研究,它说,我应该只替换掉 nn.CrossEntropyLossnn.MultiMarginLoss.

如何改变标准只实际对应 "用SVM替换全连接层 "的任务?另外,我想使用不同内核的SVM,比如说二次元的。

pytorch svm cnn
1个回答
0
投票

这个问题其实可以理解为分类中Logistic回归和SVM的区别。

我们可以天真地把你整个深度学习的平台看成是一个魔术师,这个魔术师接受输入数据,给你一组工程化的特征,你用这些特征来做分类。

根据你最小化哪种损失,你可以用不同种类的函数来解决这个分类问题。如果你使用交叉熵,就像你在应用逻辑回归分类。另一方面,如果你将边际损失最小化,实际上等于找到支持向量,这确实是SVM的工作方式。

你需要阅读一下kernels在损失计算中的作用(例如:。此处 ),但TL;DR是,对于损失计算,你有一个组件的 K(xi,xj) 实际上是内核函数,并表示类似于 xixj.

所以你可以实现一个自定义的损失,你有一个多项式的内核(在你的情况下是二次型),并在那里模仿保证金损失计算。

© www.soinside.com 2019 - 2024. All rights reserved.