【发布时间】:2020-09-16 18:55:31
【问题描述】:
我正在尝试在多分类问题中使用 pytorch 将 CNN 网络的最后一个全连接层替换为 SVM。我做了一些研究,它说我应该用nn.MultiMarginLoss 替换nn.CrossEntropyLoss。
更改标准实际上如何与“用 SVM 替换全连接层”任务相对应?另一件事是我想使用具有不同内核的 SVM,例如二次内核。
【问题讨论】:
标签: pytorch svm conv-neural-network
我正在尝试在多分类问题中使用 pytorch 将 CNN 网络的最后一个全连接层替换为 SVM。我做了一些研究,它说我应该用nn.MultiMarginLoss 替换nn.CrossEntropyLoss。
更改标准实际上如何与“用 SVM 替换全连接层”任务相对应?另一件事是我想使用具有不同内核的 SVM,例如二次内核。
【问题讨论】:
标签: pytorch svm conv-neural-network
这个问题其实可以理解为Logistic回归和SVM在分类上的区别。
我们可以天真地看待你的整个深度学习平台,就好像你有一个魔术师,那个魔术师接受输入的数据,给你一组工程特征,你用这些特征来做分类。
根据您最小化的损失,您可以使用不同类型的函数来解决此分类问题。如果您使用交叉熵,就好像您正在应用逻辑回归分类。另一方面,如果将边际损失最小化,实际上等于找到支持向量,这确实是 SVM 的工作原理。
您需要了解内核在损失计算中的作用(例如,here),但 TL;DR 是对于损失计算,您有一个 K(xi,xj) 的组件,它实际上是内核函数并表示xi 和xj 的相似性。
因此您可以实现自定义损失,其中您有一个多项式内核(在您的情况下为二次),并在那里模拟边际损失计算。
【讨论】: