卷积神经网络
一、视频学习(心得体会).
- 了解了卷积神经网络的发展历程以及什么是就卷积神经网络。
- 了解了CNN的几个基本结构:卷积、池化、全连接。
- 了解了几个典型网络结构:AlexNet、VGG、GoogleNet、ResNet。
- 了解了卷积神经网络在计算机视觉、自然语言处理等领域重要意义。
- 神经网络的深度学习将会是未来人工智能发展的趋向。
二、代码练习
1.MNIST数据集分类
- 构造简单的CNN对数据集进行分类
![在这里插入图片描述](https://img-blog.csdnimg.cn/3d76b90c2de64819a42a7f0f337056b6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_cent)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2f0a9a8b84ff4101b5bf49708878abe8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_ter)
![在这里插入图片描述](https://img-blog.csdnimg.cn/11c43d53803f45d199e45050f3152a4c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_ceer)
![在这里插入图片描述](https://img-blog.csdnimg.cn/1730fc5430f44508a88d803f44b65fa0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_cer)
- 随着训练次数不断增加、准确率也在不断增加。
![在这里插入图片描述](https://img-blog.csdnimg.cn/00b714fb61894724afdfd19c2f67a3c7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_cter)
2.CIFAR10数据及分类
- 利用CNN对CIFAR 10 数据集进行分类,分类并识别图片中的物理物体。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7cd8fc37fdc74ca1a9d2ff00eb511601.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/063216e273e44ad7b2537fa8a1c67bc8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/669efc8a525449e9b7ec85156d461a5c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
- 随着训练次数增加、准确率不断增加、出错率随之不断减小。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a00cc4c5433b43d385297aee23331714.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.使用VGG16对CIFAR10分类
- 此处代码有少量错误,第一个错误是cfg未定义、改成self.cfg即可,然后就图片尺寸不匹配,该错误可在out=out.view前加入print(out.shape)可进行查看应有的尺寸,如下所示
def forward(self, x):
out = self.features(x)
print(out.shape)
out = out.view(-1,2048)
out = self.classifier(out)
return out
- 运行后输出结果如图所示,然后根据结果把2048改成相应的512或者51211即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/386a763699ec475b9549078a91bcfc15.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_ce)
- 完整代码修改如下,此处应注意nn.Linear(51211, 10)的前项应该与out.view(-1,51211)的后项保持一致,不然会因不匹配导致出错
class VGG(nn.Module):
def __init__(self):
super(VGG, self).__init__()
self.cfg = [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M']
self.features = self._make_layers(self.cfg)
self.classifier = nn.Linear(512*1*1, 10)
def forward(self, x):
out = self.features(x)
out = out.view(-1,512*1*1)
out = self.classifier(out)
return out
- 修改后进行训练如下,测试图片通过率为83.66%,建议设置采用GPU训练,不然非常的慢。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e9c17834d1c54d668de3ccb1a4444df5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c86fb2e6349f48e28e012321dca413e6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG92ZWpteQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)