CS231n Assignment 1(一)

本文详细介绍了CS231n课程作业第一部分的内容,涵盖KNN简单分类器及其快速计算方法,以及线性分类器的SVM和Softmax损失函数。通过矩阵运算实现KNN的距离矩阵计算优化,同时讨论了SVM和Softmax损失函数的定义及梯度计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@[TOC](CS231n Assignment 1(一))
这篇文章就用来说说CS231n A1 Q1-Q3主要教的东西,还有计算SVM、Softmax损失函数和梯度的全矢量化(fully-vectorized)代码吧。

0.图像识别的简单分类器

CS231n是讲卷积神经网络(Convolutional Neural Network,CNN)图像识别的,当然,不可能一开始就来讲CNN(可能也可以吧),所以前面的几个lecture从简单的图像识别器开始讲起。

A1前三问主要讲了两大类图像识别分别器:KNN (nonlinear classifier中的一种) 和 linear classifier,linear classifier 根据Loss的不同又可以再分成svm loss linear classifer 和 softmax loss linear classfier。

1.KNN (Q1)

KNN分类器比较简单。它的基本逻辑是,在训练的时候记住所有的训练样本,包括样本的特征和标签。在预测的时候,它计算测试样本到各个训练样本的“距离”,然后根据前 K K K 个最近的训练样本的标签来决定预测的标签是什么。

好比说,我们取 K = 3 K=3 K=3,然后计算出来离测试样本最近的3个样本的标签分别为 1 , 1 , 2 1,1,2 1,1,2,由于这里面 1 1 1 最多,所以测试样本的预测标签是1。

这个算法最关键的地方是计算距离矩阵,也就是各个测试样本到训练样本的距离。如果测试样本的数目是 N t e N_{te} Nte,训练样本的数目是 N t r N_{tr} Ntr,那这个距离矩阵的维度是 N t e × N t r N_{te}×N_{tr} Nte×Ntr,其中 ( i , j ) (i,j) (i,j)位置的元素代表测试样本 i i i与训练样本 j j j的距离。

比如说我们要用 L 2 L^2 L2 范数来表征距离。最简单的计算方法是写两个loop,一个循环test set,一个循环training set,逐一计算距离。当然,这种办法的计算速度是贼慢。

我们可以使用fully-vectorized的代码来加快速度,因为numpy的库已经为我们优化过矩阵运算的速度了。Python代码如下:

    X_te_square=np.sum(X**2,axis=1).reshape(num_test,1)
    X_tr_square=np.sum(self.X_train**2,axis=1).reshape(1,num_train)
	X_te_tr_cross=np.dot(X,self.X_train.T)
    dists+=X_te_square
    dists+=X_tr_square
    dists-=2*X_te_tr_cross
    dists=np.sqrt(dists)

原理就是将平方项展开为二次项、交叉项,然后用pyhton numpy自带的broadcast功能将二次项和交叉项拼接回去。

2.Linear Classifier (Q2 & Q3)

我们可以把每张图片拉长成一个长向量 x ∈ R D x\in R^D xRD,这里 D D D是图片的像素点数乘上RGB通道数。一般来说,我们希望训练一个分类器,把图片分为 { 0 , 1 , . . . , C − 1 } \{0,1,...,C-1\} { 0,1,...,C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值