第四次作业:CNN实战

第四次作业:CNN实战

1.数据下载

请添加图片描述

2.数据预处理

完成数据下载之后,需要对数据进行一些预处理:
图片将被整理成 224 × 224 × 3 的大小,同时还将进行归一化处理。
第四次作业:CNN实战_第1张图片

设置VGG的格式
同时加载图像的数据。
第四次作业:CNN实战_第2张图片

将数据拆分为训练集和有效集;
顺便取一小部分数据用来做可视化。
第四次作业:CNN实战_第3张图片

在把这几张图片打印出来看看效果:
第四次作业:CNN实战_第4张图片

打印图片和对应结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XNrDPNxi-1666445534630)(6.png)]

input_try是5张244x244x3(RGB三通道)的小图片;
lable_try是这五张图片对应的标签,都是0,说明,这五张照片都是猫;
其中规定:标签为0是猫,1是狗。
第四次作业:CNN实战_第5张图片

3.创建VGG

第四次作业:CNN实战_第6张图片

接下来的dic_imagenet是各种动物的标签。
来源自下载的模型中会对数据有一个分类的总概率分布,有5000种分类,dic_imagenet适合最终的分类概率有关的一个数。
就如代码中print(dic_imagenet)所展示的,是各种动物的标签
在这里插入图片描述

接着
第四次作业:CNN实战_第7张图片

第四次作业:CNN实战_第8张图片

打印出结果,观测可知:
结果为5行(因为一共是5张图片嘛),1000列的数据,每一列在不同dic_imagenet 目标识别的结果。
结果非常奇葩,有负数,有正数。
为了好看(至少让数据看起来像一个概率),我们把结果输入到 Softmax 函数。
第四次作业:CNN实战_第9张图片

第四次作业:CNN实战_第10张图片

4.修改最后一层网络,冻结前面层的参数

首先说明为什么要这么做?
因为我们使用的模型是现成的、预训练好的模型,所以大部分的模型参数我们都不需要动,只需要动最后全连接层输出部分的参数就可以了(也就是修改最后一层网络)。
因此
需要把最后的 nn.Linear 层由1000类,替换为2类。
为了在训练中冻结前面层的参数,需要设置 required_grad=False。
这样,反向传播训练梯度时,前面层的权重就不会自动更新了。训练中,只会更新最后一层的参数。
第四次作业:CNN实战_第11张图片

5、训练全连接层

虽然VGG大部分层数参数不需要更改,但是毕竟最后输出还是要靠全连接层,最后一层的参数是发生变动的(相当于前面99%的网络都别人训练好的,我就训练最后的1%),所以我们还是需要训练、并测试全连接层。
第四次作业:CNN实战_第12张图片

6、测试整个模型

现在整个模型都训练好了,那就理所应当的跑一跑,测试而已。
现在输入的是Valid集,因为它自带标签,可以用来统计一些误差数据。
第四次作业:CNN实战_第13张图片

7.可视化输出结果

第四次作业:CNN实战_第14张图片

第四次作业:CNN实战_第15张图片

至此,完成VGG网络的搭建并分类应用。

8.数据下载

下载官方提供的数据并解压
第四次作业:CNN实战_第16张图片

9.数据处理

第四次作业:CNN实战_第17张图片

11.运行结果

csv文件中的数据如下:
第四次作业:CNN实战_第18张图片

结果提交
在这里插入图片描述

你可能感兴趣的:(软件工程)