AlexNet学习

参考b站视频做的笔记啦,up主是个大佬。

数据集

ILSVRC,是imagenet的子集
有1000个类别

亮点

  1. 首次利用GPU进行网络加速
  2. 使用ReLU激活函数,而不是传统的Sigmoid激活函数(求导麻烦,梯度消失)
  3. LRN局部响应归一化。
  4. 在全连接的前两层使用Dropout随机失火神经元,来减少过拟合。

过拟合
AlexNet学习_第1张图片
根本原因:模型设计过于复杂,参数训练过多,训练数据少。
导致拟合的函数完美预测训练集,但对新数据的测试集的预测结果差。泛化能力差。
Dropout
可以理解为变相减少了训练参数,来减少过拟合。
AlexNet学习_第2张图片

AlexNet网络讲解

  1. 先回顾一下公式
    wide:宽
    Filter:过滤器(卷积核)
    stride:步长
    padding:填补 (P是两边padding的像素之和,可以不一样)如下
    AlexNet学习_第3张图片
    下图是整体的网络结构:
    AlexNet学习_第4张图片
    注意最后是1000,因为原作用的数据集有1000个类别,如何用在自己的5类的数据集,只需要将最后改成5就行

作者使用两块GPU进行并行运算,其实上下两部分是一模一样的。

Conv1
kernels=48*2
kernel_size=11
padding:[a,b]->[1,2]
stride:4
input_size:[224,224,3]. output_size:[55,55,96].
可以通过公式:55=(224-11+a+b)/4+1
a=1 b=2
意思是左1右2上1下2加零。
Maxpool1
图中没有,经过查阅得到
kernel_size=3
padding:0
stride:2
N=(55-3)/2+1=27
input_size:[55,55,96]. output_size:[27,27,96]
Conv2
AlexNet学习_第5张图片

kernels=128*2
kernel_size=5
padding:[2,2](查阅)
stride:1(查阅)
N=(27-5+4)/1+1=27
input_size:[27,27,96]. output_size:[27,27,256].
Maxpool2
图中没有,经过查阅得到
kernel_size=3
padding:0
stride:2
N=(27-3)/2+1=13
input_size:[27,27,256]. output_size:[13,13,256]
再往后见视频吧

花分类数据集

5个类
AlexNet学习_第6张图片
这是数据链接,点击后自动下载
花分类数据集
下载后的数据集是按类别划分的,但是我们还需要将其划分成训练集train和验证集val(9:1)
AlexNet学习_第7张图片
运行python脚本即可完成划分。

网络详细参数

AlexNet学习_第8张图片
代码中我们学到

  1. 如何换其他的数据集放到网络中
  2. 代码的是否使用GPU设置
  3. 初始化模型参数
  4. 通过设置参数来实现不同分类个数的调用
  5. net.train()  # Sets the module in training mode.我们希望只在训练过程中随机失活神经元
    
  6. 测试训练时间的函数
  7. 我的 AlexNet.pth为gpu训练出来的,现在我在cpu上预测的话,就要加 map_location=‘cpu’,具体看代码
  8. 学会了如何用自己数据集训练,首先按flower_data文件格式摆放好,用split_data划分,代码上的话只需要修改num_class改成你的类别
    俺在colab上的训练结果好低哈哈哈哈
    AlexNet学习_第9张图片

你可能感兴趣的:(pytorch深度学习,学习,深度学习,神经网络)