【CS231n系列】

article/2025/10/5 11:20:52

Stanford-cs231n课程学习笔记(一)


Stanford课程原版是英文,奈何本人英语菜的一批。原版网站放在下面,xdm可以多多学习。BUT! B站up<同济子豪兄>yyds好吧!!!
Stanford231n

文章目录

  • Stanford-cs231n课程学习笔记(一)
  • 前言
  • 一、传统算法
    • 最邻近分类器 Nearest Neighbor classifier
    • 存在问题
  • 二、深度神经网络
    • 1.线性变换
    • 2.梯度下降
      • 损失函数
      • 优化函数
  • 总结


前言

刚开始在犹豫‘我一个学搞music的可以学cv嘛?’ 咱就是说,学就完事了。毕竟直接搞music咱也不会啊。

CV是当下人工智能热门领域。计算机视觉领域有许多细分方向:物体检测、图像标注、三维重建、人体姿势识别、图片描述等。
课程主要:使用深度学习 (使用深度神经网络实现机器学习的技术) 解决CV领域的问题,特别是针对图像分类技术等。
子豪兄使用亲切的母语进行讲解,小白极度友好!
实现图像分类技术的方法有很多:
①:使用传统的机器学习算法,也就是文章中提到的线性分类器。如KNN、SVM等方法。通过构造特征,使用算法达到分类效果。
②:采用数据驱动的方式,使神经网络自动学习特征,根据所学到的特征进行分类。
③:当然,现在也有一些迁移学习可以使用少量数据重新训练一个预训练模型,使其达到很好的分类效果。

本文简单记录从课程中学到的前两种方法。


一、传统算法

传统算法包括KNN、SVM、决策树等算法,可以很简单的从sklearn库中进行调用,现在通常运用在一些数据分析中。这些算法构造的线性分类器(线性分类器 – 决策边界是特征的线性函数的分类器)如何进行图片的分类?

最邻近分类器 Nearest Neighbor classifier

最邻近算法:找到最邻近的样本的分类,利用‘近朱者赤’原则,进行新样本的归类。
K-NN算法,多找几个人!K个人!一个人容易产生误差!
knn的二分类分界面展示
图片展示的使使用knn进行二分类,通过人工构造的特征空间,将样本在空间中进行映射,形成不同的分布,最终根据分布,模型产生一个最优的分解面,对新样本进行分类。KNN是使用样本之间的垂直平分线的组合进行边界的划分。
对于图像分类操作步骤如下:
第一步:首先使用像素点分布,将图片映射到空间中。(train)
补充一点我不会的知识:一个视觉单位取值范围为0~255、8bit表示一个像素点、3通道RGB 通常用一个网格表示
第二步:进行样本之间的距离计算。(test)
计算样本之间的距离通常使用:

L1距离<曼哈顿距离、L1范数>:求和-对应位置差的绝对值  与坐标系关系比较密切、特征之间有明确的语义
L2距离:<欧氏距离> :高中两点距离公式,圆上距离圆点的距离都相同 
需要计算每一个待分类样本和分布空间各个点的距离。通常具有很高的时间复杂度。

L1L2距离图示
听起来似乎很好理解,解释性也较强,但是存在一个问题,这种分类是否具有较高的可信度?

使用k临近和L2分类出现的问题
图片展示的是使用L2距离进行变换后的图片和原图的比较,在故意设计下,后三张变换过后的图片和原图具有相同的L2距离。可见,使用L2距离简单的进行计算像素之间的距离进行分类,可靠性不强。
同时,在随着样本维度的升高,逐渐出现空间维度爆照等问题。
维度升高,计算所需要的压力越大
因此我们可以发现KNN具有以下优缺点:

优点:简单,易于理解,易于实现,无需估计参数,无需训练适合对稀有事件进行分类特别适合于多分类问题(multi-modal,对象具有多个类别标签)。
缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢可解释性较差,无法给出累决策树的规则。

在日常生活中,仍然有用到KNN的地方。如我们常见的推荐算法,通常根据余弦相似度、L距离等计算用户之间、商品之间某些特征的距离,进行推荐。(用户注册时的标签选择就是为了一定程度上解决推荐算法的冷启动问题)

存在问题

上面我们提到,使用像素不能很好的进行图片的描述,进而分类器效果也不理想。如果我们采用一种对于物体的某些特征进行描述,是否会更好的分类呢?比如,猫咪:两只尖尖的耳朵、胡子等
猫咪轮廓描述分类
问题又出现,猫咪有很多种,同时世界上还有很多生物,我们无法做到每一个都达到细粒度划分。
人类无法对细粒度的特征进行逐个详细描述
这时,我们便需要使用深度神经网络,帮助我们学习到图片中的某些特征,进而根据自己所学到的特征,进行新样本的分类。

二、深度神经网络

神经网络在很早就被提出,但是当时的CPU算力有限,没有使人们注意到这块金子!

1.线性变换

线性分类器
线性分类器和我们学习的初等函数中的线性函数相似,其中W表示权重(是一个分类数*特征的矩阵),b表示偏差。构造分界面,能够将样本进行分类。其中10表示最终分类类别数,3072(32 * 32 * 3)表示特征数
图片到类别
通过矩阵乘法,计算出每一个类别所获得的分数。分数最高的类别即为分类类别。

2.梯度下降

在随机初始化的W和b,得到的分类结果几乎没有什么卵用。我们如何进行参数更新,使其能够好起来?

损失函数

在给定的数据集中,计算模型分类标签和真是标签之间的差距,也就是我们所说的损失。
SVMloss
图片所示的是SVM中用到的损失,也称为铰链损失。
hingeloss
当然还有多种损失函数L1、L2损失、 交叉熵损失函数、最大似然估计(某种时间发生的概率最大)、KL散度
等。(留个坑!明天一定补!!!)

优化函数

损失过大,要用优化。通过计算梯度,找到能够使Loss最小的地方。
数值方法求梯度
数值方法可以帮助我们求梯度,但是存在计算很慢的问题。采用解析解方法进行梯度计算。

优化函数本质:根据各个特征值的变化对于最终Loss的影响,计算梯度,使用梯度下降,使Loss的值逐渐变小。为什么可以通过选择合适的优化函数,使用梯度下降方法进行优化?

是因为Loss通常为非凸函数,可以使用优化方法找到其中的局部最优点、全局最优点,以降低Loss损失。
损失函数为非凸函数

不同的优化函数
从图中可以看出,不同的优化函数所产生的优化效果不同。
同时,梯度下降过程中,除了选择合适的优化函数,还需要选择合适的学习率(lr):

lr过小:更新的速度过慢。
lr过大:导致出现震荡现象,不能够达到最后的收敛。

同时还有batch-size的选择问题:

batch-size太大:内存问题、全局梯度计算过慢。
batch-size太小:收敛速度太慢。

总结

提示:*******softmax、正则化明天留着补天******


http://chatgpt.dhexx.cn/article/Q4u3hmVd.shtml

相关文章

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

向AI转型的程序员都关注了这个号&#x1f447;&#x1f447;&#x1f447; 机器学习AI算法工程 公众号&#xff1a; datayx 作为全球计算机四大名校之一&#xff0c;斯坦福大学的CS230《深度学习》课程一直受到全球计算机学子和从业人员的热烈欢迎。 CS230授课人为全球著名计算…

CS230学习笔记(一)

CS230学习笔记(一) 1.前言 ok&#xff0c;前思后想&#xff0c;左思右想&#xff0c;我还是觉得自己得督促一下自己&#xff0c;所以&#xff0c;我觉得开始更新cs230的笔记&#xff0c;当然&#xff0c;我前面的六篇pytorch学习笔记我是不会放着不管的&#xff0c;后面肯定会…

目标检测(CS230)

内容来自CS230课程。 目录 目标定位&#xff08;Object localization&#xff09; 特征点检测&#xff08;Landmark detection&#xff09; 基于滑动窗口的目标检测算法 滑动窗口的卷积实现 &#xff08;Convolutional implementation of sliding windows&#xff09; 网络中的…

PHP配置环境变量

1.找到“高级系统设置”&#xff08;二选一的方法找到环境变量&#xff09; ① 我的电脑-属性-高级-环境变量 ②win8,10 直接在搜索框搜 “查看高级系统设置”-环境变量 2.找到变量"Path" ①加上 “E:\phpStudy\PHPTutorial\php\php-7.0.12-nts” &#xff08;php.e…

PHPstudy 设置PHP为环境变量

1.首先启动phpstudy点击‘切换版本’查看当前使用环境的php版本 2.在右键点击桌面的phpstudy图标进入文件夹位置 2.点击PHPTutorial->PHP 3.点击你的开发版本的php文件&#xff0c;我们会看到php.exe文件&#xff0c;复制当前文件位置路径 4.右键点击计算机或者我的电脑选择…

windows环境下设置多个PHP版本的环境变量

windows环境下设置多个PHP版本的环境变量 所在位置修改系统变量修改用户变量重启电脑 所在位置 我的电脑->属性->高级系统设置->高级->环境变量 根据图示&#xff0c;找到相应的变量 修改系统变量 环境变量->系统变量->Path 系统变量&#xff1a;把两个…

windows10的PHP环境变量

win10 环境变量配置 如何在命令行运行php文件 1.配置环境变量 2.进入php所在路径 然后输入 php 文件路径/文件名 即可 参考文献&#xff1a; https://blog.csdn.net/QQ2542920524/article/details/78692116

Windows环境下,PHPStudy设置环境变量

win7系统设置环境变量 1、选中计算机&#xff0c;点击 鼠标右键&#xff0c;选择属性 2、选择高级系统设置&#xff0c;打开&#xff0c;打开后选择高级&#xff0c;然后就能看到环境变量 3、打开环境变量&#xff0c;查找Path &#xff0c;选中path&#xff0c;再点击编辑即可…

【PHP】配置环境变量,查看php版本(保姆级图文)

目录 配置环境变量找到php所在的目录&#xff08;有一个php.exe文件&#xff09;环境变量path中添加重启电脑&#xff08;可选&#xff09; 查看php版本&#xff08;检测是否成功配置了php&#xff09;总结 『PHP』分享PHP环境配置到项目实战个人学习笔记。 欢迎关注 『PHP』 系…

windows中设置php环境变量

1.我的电脑-》右键&#xff08;选择我的属性&#xff09; 2.点击高级设置 3.点击环境变量 4.在系统变量中找到Path 点击 5.找到php.exe的文件目录&#xff0c;添加到path中 6.php -v 显示版本&#xff0c;表示成功

Linux有多个php版本的时候指定php版本设置环境变量

最近在安装swoole的时候老是出错&#xff0c;安装完成以后再php-m中能看到swoole扩展已经开启&#xff0c;而在 phpinfo中却看不到。查看了下php.ini的位置发现这两个指向的路径不同。查看了下安装的php有两个版本&#xff0c;一个是自带的在/usr/bin/php&#xff0c;一个是自己…

windows设置php环境变量

1、找到要设置的php版本路径,然后进行复制 2、添加环境变量&#xff08;控制面板->高级系统设置->环境变量->最上方的李硕的系统变量Path->新增两条php路径即可&#xff09; 3、打开cmd输入php-v 即可查看添加的php版本信息 最后问题没有解决的话&#xff0c;或者有…

配置windows系统中 PHP的环境变量

1&#xff0e; 首先到php官网下载php-5.3.6-nts-Win32-VC9-x86.ZIP 解压到电脑硬盘。将文件解压到文件夹php5.3.6 下载地址&#xff1a;http://www.php.net/downloads.php 2&#xff0e; 将解压后的php5.3.6文件夹放到E:\Program Files文件夹下面 3&#xff0e; php目录下的“p…

w11 php 环境变量

PHP 安装 解压完成后 进入目录 php -v 得到版本号就OK&#xff0c;配置环境变量 安装composer 全部下一步就可以了 命令行中 composer 出现composer版本号安装没问题&#xff0c;如果没有从新找下 加入到环境变量中&#xff0c;如果还不行&#xff0c;就重新安装 更新 co…

Windows 系统配置 PHP 环境变量(PhpStudy集成环境)

打开系统的【高级系统设置】&#xff0c;点击【环境变量】。 选择【系统变量】中的【Path】&#xff0c;点击编辑。 点击【新建】&#xff0c;填入当前 PHP 版本 php.exe 所在目录&#xff0c;点击确定。 验证有效性 打开命令行窗口&#xff0c;输入 php -v 查看。 出现 PHP 的…

windows下设置PHP环境变量

# 安装php # 扩展 mysql 、gd、sockets &#xff08;我的是已安装好的wamp&#xff09; #在php目录下的、打开php.ini 去掉下面注释&#xff08;前面的分号&#xff09; ; On windows: ; extension_dir "ext" #添加环境变量 win7为:右击计算机-属性-高级系统设…

为php设置系统变量、环境变量

看到这个标题&#xff0c;有两个疑问&#xff0c;是给php.exe设置系统环境变量&#xff0c;还是给编程语言设置可直接调用环境变量&#xff0c;说到这里有的人可能晕了&#xff0c;因为我们常见到的都是第一种&#xff0c;相当于给某个命令设置快捷键&#xff0c;不用进到安装该…

配置php环境变量及其作用

未配置PHP环境变量 一般情况下&#xff0c;在使用php时&#xff0c;不需要配置环境变量&#xff0c;只要在PHP.ini指定扩展的组件dll的ext路径和include环境路径即可&#xff0c;但cmd命令行在其他目录下运行php会报错。 配置PHP环境变量 配置环境变量&#xff0c;我们可以轻松…

Java IO操作详解

在Java编程中&#xff0c;IO&#xff08;输入输出&#xff09;是重要的组成部分&#xff0c;Java应用常常需要从外界输入数据或者把数据输出到外界。 Java IO的核心用一句话概括&#xff1a;抽象类或接口之中的抽象方法会根据实例化子类的不同&#xff0c;会完成不同的功能。所…

C++中的IO操作

IO操作 了解C中的IO操作C中的二进制读写&#xff0c;文本读写C中的stringstream类与I/O操作中对<<与>>运算符的重载 了解C中的IO操作 我们学习IO操作&#xff0c;就要先了解什么是IO操作&#xff0c;从名字中就可以看出来&#xff0c;I,O就代表着输入输出的操作&a…