CS231N assignment2 SVM

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

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个样本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值