首页 > 解决方案 > 使用具有不同内核的 SVM 作为 CNN 网络中的最后一层

问题描述

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

更改标准实际上如何与“用 SVM 替换全连接层”任务相对应?另一件事是我想使用具有不同内核的 SVM,例如二次内核。

标签: pytorchsvmconv-neural-network

解决方案


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

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

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

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

因此,您可以实现自定义损失,其中您有一个多项式内核(在您的情况下是二次的),并在那里模仿边际损失计算。


推荐阅读