人工智能学习07--pytorch12--AlexNet+花数据集+pytorch

AlexNet详解

人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第1张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第2张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第3张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第4张图片
这个网络可以看成上下两部分,因为作者使用了两块GPU进行并行运算。
为了便于理解,看其中一部分就行,因为这两部分是一样的。

  1. Conv1
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第5张图片
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第6张图片
    (1+2)代表的是padding的大小,虽然图中没有给出,但是自己可以推理出来,也可以从源码里面发现。
    1:在特征矩阵左边加上一列0,在右边加上两列0,上面加上一列0,下面加上两列0 。

(括号弹幕大佬:
2p就等于两边padding的像素之和,不一定严格要求两边padding的像素个数一样


其实这里双gpu和单gpu卷积层和下采样一致,这是因为batch只是增加厚度,而做卷积只会影响高宽。只是经过全链接的线性层,需要batch数据交互,后面才会互相影响。

  • MaxPool1
    Maxpooling下采样
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第7张图片
    池化操作只会改变输出矩阵的高度和宽度,不会改变特征矩阵的深度

  • Conv2
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第8张图片

  • MaxPool2
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第9张图片

  • Conv3
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第10张图片

  • Conv4
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第11张图片

  • Conv5
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第12张图片

  • Maxpool3
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第13张图片

  • 3个全连接层
    将Maxpooling得到的输出展平,与这三个层进行连接。
    最后一个层有1000个节点,因为论文用到的数据集有1000个类别。

花分类数据集

  • 下载数据集
    五个类别人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第14张图片
    下载地址https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第15张图片
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第16张图片
  • 训练集、测试集
    使用脚本将数据按照9:1的比例划分为训练集和验证集
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第17张图片
    回到文件夹检查,发现划分成功
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第18张图片

使用pytorch搭建并训练花分类网络

1、定义组件

人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第19张图片
padding[1,2]是左边1右边2
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第20张图片
Sequential:之前每使用一个层结构,都要self.模块名称=……,如果每个模块都这么定义,那么工作量太大。
对网络层次比较多的网络,可以使用Sequential函数来精简代码

  • Conv2d
    关于padding:
    ①整数:如1,则会在矩阵上下左右补一行/列0;
    ②tuple:
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第21张图片
    ③:nn.ZeroPad2d 精确补0
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第22张图片
    在卷积过程中,如果按照公式计算得到的不是整数:
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第23张图片
  • ReLU
    inplace:pytorch中增加计算量,但能减小内存容量的方法
  • Maxpool1
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第24张图片
  • 代码的卷积核个数都弄成论文中的一半了
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第25张图片
    下一步就是跟全连接层连接
  • 三个全连接层
    drop使全连接层的节点按照一定比例失活
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第26张图片
    init_weights为True则进入初始化权重函数
    self.module
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第27张图片
    返回一个迭代器。这个迭代器会遍历网络中所有的模块–>则这个迭代器会遍历网络中每一个层结构:
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第28张图片
    此处初始化权重的方法:
    人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第29张图片
    pytorch里面自动使用上面这个初始化方法

2、定义正向传播

人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第30张图片

train

人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第31张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第32张图片
好,成功了
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第33张图片
太感动了。
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第34张图片
jason这样:
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第35张图片
查看数据集:
把batch_size设置成4,因为是查看四张图片。把后面的shuffle随机打乱改成True,否则一直按顺序读取那就是同一文件夹中的同一种类。
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第36张图片
但是报错了。
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第37张图片
这样改之后好了,但是有新的错误
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第38张图片
MatplotlibDeprecationWarning: Support for FigureCanvases without a required_interactive_framework attribute was deprecated in Matplotlib 3.6 and will be removed two minor releases later.

找了许多方法,最后发现是Matplotlib的后端问题。一开始输出后端:
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第39张图片
按照网页说法:
https://blog.csdn.net/m0_37724919/article/details/128874187(不是我这个问题,但是先码住,说不定以后换到服务器会用到)

https://blog.csdn.net/Reginasong/article/details/128841357(解决问题)
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第40张图片
打印出来的是这个:
module://backend_interagg
感觉不对,按照网上的,把后端改成了:
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第41张图片
解决问题。
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第42张图片
注释掉这段代码之后把之前的地方改回去,继续下一步。
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第43张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第44张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第45张图片

validate

人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第46张图片

main

人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第47张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第48张图片

predict

人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第49张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第50张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第51张图片

遇到了这个问题:
RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 0
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第52张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第53张图片
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第54张图片

使用自己的数据集训练网络

修改网络参数
train:
在这里插入图片描述
predict:
人工智能学习07--pytorch12--AlexNet+花数据集+pytorch_第55张图片

你可能感兴趣的:(pytorch,人工智能,学习,pytorch)