无题
Part One——Code Train《猫狗大战》
Enviroment
vscode:1.83.0
python 3.11.3
pytorch 2.0.1
1.导入库 pytorch等
#本次内容是使用LeNet实现猫狗图片的二分类
# 源数据(https://www.kaggle.com/datasets/tongpython/cat-and-dog/data)
#这里已经下载到本地
MyDataLoader
用os中库读取本地文件 并根据图片的名字进行处理 分类
使用DataLoader 将train分为200个batch 并打乱
创建网络
super是为了继承父类的init所使用的,
借鉴作业四中的leNet代码 在此基础上增加一个卷积层和池化操作,最后output是个2维向量,并且修改最后的ReLU为Sigmoid更适合二分类模型
损失函数和优化器分别为交叉熵和Adam 学习率为0.001
训练过程
最后Epoch:9 Acc:0.9925
验证集有0.8070的精准度
最后再测试集上加载模型
提交在AI研习社
resNet
接着使用resNet重新新训练
用现成的resnet34
需要设置一下function 为 全连接层
损失函数和优化器相同
跑了50m 最后Acc0.9917
在验证集上达到了 0.9525的精确度
最后把test的分类结果写道csv中,提交
最后得分95.95也是比leNet高了不少
Part Two——Q&A
Q:Residual learning 的基本原理?
A:Residual 是残差 resNet是残差网络 一般的神经网络的每一层分别对应于提取不同层次的特征信息,有低层,中层和高层,而网络越深的时候,提取到的不同层次的信息会越多,而不同层次间的层次信息的组合也会越多。深度学习对于网络深度遇到的主要问题是梯度消失和梯度爆炸,传统对应的解决方案则是数据的初始化(normlized initializatiton)和(batch normlization)正则化
resNet需要构建残差元 它很容易训练,是前向和反向都可以保证,线性使得网络加深,可以达到1000层精度提升可以被移植到其他问题。 对于残差元的主要设计有两个,快捷连接和恒等映射,快捷连接使得残差变得可能,而恒等映射使得网络变深,而恒等映射主要有两个:快捷连接为恒等映射和相加后的激活函数去构造映射H(x),与构造残差映射F(x)是等价的,此外残差映射也更容易优化。
Q:Batch Normailization 的原理,思考 BN、LN、IN 的主要区别。
A:BN对N、H、W做归一化,而保留通道 C 的维度。BN对较小的batch size效果不好。BN适用于固定深度的前向神经网络,如CNN,不适用于RNN;
是对不同样本里面的同一个特征通道进行归一化处理,逐特征维度归一化
LN在通道方向上,对C、H、W归一化,主要对RNN效果明显;
IN在图像像素上,对H、W做归一化,用在风格化迁移;
Q:为什么分组卷积可以提升准确率?即然分组卷积可以提升准确率,同时还能降低计算量,分数数量尽量多不行吗?
A:分组卷积能减少运算量和参数量,所以不容易过拟合,相同输入输出大小的情况下,减少为原来的分组数分之一
分组数量并不是越多越好,当分组数目与输入图像channel相同,达到最大分组数,此时使用分组卷积会降低各个通道间的关联性,从而使得准确率降低。