使用具有不同内核的 SVM 作为 CNN 网络的最后一层

Using SVM with different kernels as a last layer in CNN network

我正在尝试在多分类问题中使用 pytorch 将 CNN 网络的最后一个完全连接层替换为 SVM。我做了一些研究,上面说,我应该将 nn.CrossEntropyLoss 替换为 nn.MultiMarginLoss

仅更改标准如何与 "replacing fully connected layer with SVM" 任务相对应?另一件事是我想使用具有不同内核的 SVM,例如二次内核。

这道题其实可以理解为Logistic回归和SVM在分类上的区别。

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

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

您需要了解内核在损失计算中的作用(例如 here ),但是 TL;DR 是关于损失计算,您有一个组件 K(xi,xj)实际上是核函数,表示xixj的相似性。

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