CS231N assignment2 SVM
CS231N Assignment2 Support Vector Machine
Begin
本文主要介绍CS231N系列课程的第一项作业,写一个SVM无监督学习训练模型。
课程主页:网易云课堂CS231N系列课程
语言:Python3.6
1线形分类器
以图像为例,一幅图像像素为32*32*3代表长32宽32有3通道的衣服图像,将其变为1*3072的一个向量,即该图像的特征向量。
我们如果需要训练1000幅图像,那么输入则为1000*3072的矩阵X。
我们用X点乘矩阵W得到一个计分矩阵如下所示,W乘以一幅图像的特征向量的转置得到一列代表分数。
每个分数对应代表一个类别,分数越高代表她所属于此类别纪律越大,所以W其实是一个类别权重的概念。
注意:下图为CS231N中的一张图,它是以一幅图为例,将X转至为3072*1,大家理解即可,在程序中我们采用X*W来编写。
更多细节可以参考CS231N作业1KNN详解

2损失函数
得到每一幅图像对应每一个类别的分数之后,我们需要计算一个损失,去评估一下W矩阵的好坏。
如下右侧为SVM损失函数计算公式。
对每一幅图像的损失用其错误类别的分数减去正确类别的分数,并与0比较求最大值
一般我们应该正确类别的分数高就证明没有损失,此时错误类别减去正确类别一定为负值,比0小故取损失为0.
为了提高鲁棒性,这里给他加了一个1。

计算所有的损失后,我们把损失累加作为最后的损失
整理后我们得到如下的公式,但是其存在一个问题,没有考虑W的影响,不同的W可能得到同样的损失,

因此我们引入一个正则,正则系数可以调节W对整个损失的影响,W越分散当然越好

代码如下:
def svm_loss_native(W,X,Y,reg):
'''
本函数用于计算SVM分类器的损失以及梯度
输入参数:
W(D,C)代表权重
D为特征向量的维度,C为分类类别的数量
X(N,D)代表训练样本的特征,0维代表每一个样本,1维代表某一样本的特征向量
对于32*32图像,N代表有N个样本

本文详述CS231N课程中的SVM模型构建,包括线性分类器、损失函数、梯度下降法及参数调整等关键步骤,演示从训练到预测的全过程。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



