cs231n学习笔记
这里写目录标题
-
assignment1:
- 进行预测训练
- 理解并验证测试过程
- 在验证集上进行高效的数据向量操作
- 具体实现K-近邻算法的过程
- 引入支持向量机模型
- 应用Softmax分类器
- 开发包含两层神经网络的深度学习架构
- 使用颜色和梯度特征提升模型性能
- 在Jupyter Notebook中实践上述技术
- 掌握numpy编程基础
-
pytorch
-
assignment2:
-
gain an understanding of neural networks and their layered architecture
-
acquire the ability to comprehend and implement vectorized backpropagation
-
master different update rules for optimizing neural networks
-
utilize batch normalization techniques during deep network training
-
apply dropout methods to prevent overfitting in neural networks
-
thoroughly validate using cross-validation methods to identify optimal hyperparameters for neural network architectures
-
dive into understanding convolutional neural network architectures while gaining hands-on experience by training models on datasets
-
BN
-
遇到的问题及挑战
-
所得与体会
-
详细说明如何训练神经网络的技术要点
-
具体分析神经网络各层之间的连接关系及其位置排列
assignment1:
1.训练预测
2.明白训练 验证测试 同时在 验证上调整超参数
3.写高效的numpy向量
4.实现knn
5.svm
6.softmax
7.两层神经网络
配置 learning_rate 太大会导致问题;损失函数 loss 落到最低值时出现异常;隐藏层的数量等于类别数量

两层神经网络的loss是什么?use softmax loss
通过不局限于像素的其他特征如颜色和梯度直方图等来进行性能提升
HOG
关于hog特征向量中各个数值的理解
在代码中为什么hog_feature被定义为一个长度为144的向量?
9^{\wedge}_{}(4, 4)=16在该表达式中使用了幂运算以计算结果为16

1.一维?
2.怎么从这个一维向量可视化出来?
后面两个非常清晰说明了功能,明白是这两对比就行了


import 与 init.py
module 包 名称及初始化
Import方式下的变量与方法引用区别
使用plt.imshow()中的归一化方法显示图像时[此外,在处理时需要考虑两种特定情况],其余情况下会自动归一化
plt.legend()?
astype是否进行了正则化处理?例如10至15之间,请具体说明操作流程。如果是将数值转换为四位数形式(如将264转换为' 4'),那么结果会是' 4'吗?对于数值超过最大值的部分(如数值超过9999),如何进行处理?如果超出范围的数字会被截断,并且小数点后的数字部分会被舍去吗?



- 关于Python函数是否需要添加括号的问题
- 当在字符串格式化时未成功转换所有参数时出现的TypeError错误提示信息是什么?如何解决?
- NumPy库中的
np.vstack用于按行堆叠数组以形成一个新的数组。
如何计算SVM梯度?svm梯度推导
SVM损失函数及其梯度矩阵的计算过程是什么?SVM损失函数及梯度矩阵的计算
Python lambda用法

此处用于变量 dw 的运算
此处用于变量 dw 的运算
《基于NumPy的浅复制与深复制基础教程》
在学习NumPy的过程中,《基于NumPy的浅复制与深复制基础教程》是一个非常有用的资源。该教程深入介绍了如何在Python环境中利用NumPy模块实现数据的浅拷贝与深拷贝操作。通过本教程的学习读者可以掌握这两种操作的核心原理及其在实际编程中的应用方法
在编程中为了确保算法运行结果的一致性和可重复性通常会设置random seed(即随机种子)来控制随机数生成过程
9.jupyter使用
使用esc + L组合键可以呈现行号位置。
通过按两次i键能够有效地中断当前单元格的运行过程。
jupyter显示全部结果
通过使用数字键功能可将当前单元格转换为标题格式,并根据键值大小调整标题的显示级别。
按住L键则会显现出每一行代码的具体行号位置。
使用command + d组合键可以在输出结果中删除最后生成的一行内容。
numpy 语法
多维数组中的np.mean函数可以理解为对剩余轴进行聚合计算。例如一个3×100×100的结构,在指定轴(1,2)时会生成三个值。

numpy中的填充函数用于在数组末尾补充零值或特定数值
Python中用于执行矩阵逐元素相除操作的技术称为矩阵点除
Python中的字典默认值方法可以通过内置的setdefault关键字实现
在Python 3.5及以上的版本中,默认导入@运算符用于表示矩阵与向量之间的乘法运算
将字符串转换为整型或浮点型的操作可通过Python内置的str转int或str转float方法完成
在Python编程语言中使用math模块中的floor函数可实现向下取整操作

command + [
参数 (*args, **kwargs)(https://www.jianshu.com/p/0ed914608a2c)
在Python中使用' ' .join()方法()
表示为浮点运算的是 / , 表示为整数运算的是 //。
[ f-string 格式化输出 ]
也可以这样:
表示为浮点运算的是 / , 表示为整数运算的是 //。
[ f-string 格式化输出 ]
也可以这样:

pytorch
nn.sequential 也可以自定义!!! 类式函数

model.eval()
转置原因



[pyotrch]nn.Conv2d中groups参数的理解


每一批是(64,3,h,w)然后着64是如何采样的呢 是通过sampler规定的方式得到的



PyTorch Dataset DataLoader Tutorial
TORCHVISION.DATASETS PAGE
Tensor Conversion Function


MSELOSS
创建自定义操作并实现反向传播算法以支持深度学习模型训练
ctx?self?
为何需要调用item():
loss.item()

assignment2:
grasp the concept of neural networks and the way they are structured in a layered framework

如何理解 backward

understand and be able to implement (vectorized) backpropagation
implement various update rules used to optimize Neural Networks
The batch normalization techniques are applied for training deep neural networks. To prevent overfitting in neural architectures, dropout methods are utilized.
The optimal hyperparameters for Neural Network architecture are determined by employing a rigorous cross-validation process to ensure robust model performance.
Grasp the architecture of Convolutional Neural Networks and practice training these models to gain experience.



dic.pop()里面两个参数意义,当没穿入相印参数,则返回第二个参数


该方法用于获取对象的属性
BN

遇到的bug以及问题
expected scalar type Long but found Float



用cifar 数据没问题

1…double() .float(). 分别是64 根32 这里需要32!long 是int64
2. 这个不是inplace操作!


- 在BN层中, training和testing的区别在于, 在testing的时候使用的均值和方差不是来自于X_test, 并且无需更新参数。
- LN层在testing和training之间没有差别。
drop中train 跟test区别
当应用dropout时,在反向传播过程中具体实现方式是什么?是否有必要记录随机数种子呢?其实不需要?是否只需记录mask即可?
在 dropout 方法中存在一个缩放操作,其目的是为了保持数据期望的一致性;而改进版本则是将这一缩放操作从预测阶段移动至训练阶段
model 跟 solver 关系:

模型中已实现了某种损失机制;但也可以通过结合affine和relu激活函数前向传播等方式来进一步优化。

在反向传播的过程中需要注意的是,在计算均方差 var 的时候同样能够对x进行求导运算。 手推bn
BN及其反向传播机制研究与实践,在深度学习框架中实现Batch Normalization层的训练与推理过程;详细探讨了Batch Normalization层在测试阶段的数据存储与应用方法及其对模型性能的影响
这里cache是什么,初值就是 dx**2? 肯定不是之前的字典

牛顿迭代法;然而我的直觉却无法从数学上证明不断迭代后会收敛;即使自己尝试过许多实例;
最终在文章中看到了正确的结论;因此确认了我的直觉。
所以许多情况下牛顿法能够收敛。
但是文章有个地方有问题 :

我也是推导得到这个,但是真正的是这样:

两个方案各有其合理性,但它们之间的区别又是什么呢

这个问题显得有些简单或容易让人困惑。测试为何会返回scores?解决方案:在缺乏标签的情况下,并无损失函数的情况下,默认的目标即为寻找预测的最大位置即可。


解决:

先考虑mode是train情况



暂时先不管,先继续看下去,先了解多层网络这么求backward
收获
max

如何应用之前介绍的bn函数,在使用时应避免沿着d方向进行正则化处理?例如,在cov层中设置c通道时也需遵循这一原则。


SGD更新的方式不仅体现在参数迭代的具体实现上,同时也涉及到了超参数的优化策略.这些超参数的选择会直接影响到整个神经网络的训练效果.整个流程包括了数据加载、前向传播、损失计算以及反向传播等关键环节,其中每一步都需要精心设计以确保系统的高效性和准确性.

实在不知道如何提升就使用emsemble!
优化:
1.利用梯度信息
2.改进学习率
3.增加了动量



Click on the file located at cs231n/optim.py in addition to reading the documentation at the top of the file so that you can understand the API.

optim_config 肯定不只是lr,还有动量etc.
总结训练一个网络的技巧
1.训练过拟合
2.optim
3.lr ws
神经网络一层的结构以及相应位置顺序
1.bn -relu - drop
pool
