pytorch - 使用具有不同内核的 SVM 作为 CNN 网络中的最后一层
问题描述
我正在尝试在多分类问题中使用 pytorch 用 SVM 替换 CNN 网络的最后一个全连接层。我做了一些研究,上面写着,我应该nn.CrossEntropyLoss
用nn.MultiMarginLoss
.
更改标准实际上如何与“用 SVM 替换全连接层”任务相对应?另一件事是我想使用具有不同内核的 SVM,例如二次内核。
解决方案
这个问题其实可以理解为Logistic回归和SVM在分类上的区别。
我们可以天真地看待你的整个深度学习平台,就好像你有一个魔术师,那个魔术师接受输入的数据,给你一组工程化的特征,你用这些特征来做分类。
根据您最小化的损失,您可以使用不同类型的函数来解决此分类问题。如果您使用交叉熵,就好像您正在应用逻辑回归分类。另一方面,如果最小化边际损失,实际上等于找到支持向量,这确实是 SVM 的工作原理。
您需要了解内核在损失计算中的作用(例如,此处),但 TL;DR 是对于损失计算,您有一个组件K(xi,xj)
实际上是内核函数,并指示 和 的相似xi
性xj
。
因此,您可以实现自定义损失,其中您有一个多项式内核(在您的情况下是二次的),并在那里模仿边际损失计算。
推荐阅读
- python - OpenCV+python:从 3.4.2 开始访问 HoughLines 累加器
- r - R中聚类中心与异常值之间的距离
- mysql - 使用 NodeJS 从 MySQL 数据库中检索数据并将其传递给 AngularJS 页面
- java - GridLayout 和 CardView 无法在所有设备上完美运行
- node.js - 在 Heroku 上,如何使 boost 库可用于编译 NodeJS 应用程序?
- javascript - 格式化字段(详尽 & ES3)
- oracle - 我如何在 oracle apex 中将负数变为红色
- ruby - 在 META-INF 中找不到签名文件。无法继续。(运行时错误)
- css - 使用媒体断点复制 Bootstrap flexbox 网格系统
- python-3.x - 使用 python 脚本在网页上执行“ctrl+F”...