Assginment4:Practice of CNN
本博客为OUC2022秋季软件工程第四次作业
文章目录
1.代码练习
Colab 迁移学习
1. 下载数据
引入需要的包,判断是否存在GPU。如果返回False,则表示没有GPU,可以在编辑-笔记本设置-GPU里选择。图中返回True,表示存在GPU加速,可以进行下一步。
! wget http://fenggao-image.stor.sinaapp.com/dogscats.zip
! unzip dogscats.zip
下载和解压缩数据集。

2.预处理
查看图片属性。0代表cat,1代表dog。

显示图片查看数据是否正常。

3.创建 VGG Model
tensor输出每一种目标识别的结果。
其中softmax与hardmax相对。hardmax最大的特点就是只选出其中一个最大的值,即非黑即白。但是往往在实际中这种方式是不合情理的,比如对于文本分类来说,一篇文章或多或少包含着各种主题信息,我们更期望得到文章对于每个可能的文本类别的概率值(置信度),可以简单理解成属于对应类别的可信度。所以此时用到了soft的概念,softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。

4. 修改最后一层,冻结前面层的参数
显示VGG结构

5. 训练并测试全连接层
采取6个分类器并行训练。
分类器的构造和实施大体会经过以下几个步骤:
- 选定样本(包含正样本和负样本),将所有样本分成训练样本和测试样本两部分。
- 在训练样本上执行分类器算法,生成分类模型。
- 在测试样本上执行分类模型,生成预测结果。
- 根据预测结果,计算必要的评估指标,评估分类模型的性能。

训练模型

测试模型

测试结果

单次可视化的数据测试

想法和解读
深度学习流程
如何在工程问题中使用深度学习:首先准备待解决问题的数据,然后下载预训练好的网络,接着用准备好的数据来 fine-tune 预训练好的网络。
数值归一化
图片数值在[0,255]区间,为了训练时收敛速度快,避免激活函数饱和,需要将图片数值转换至[0,1]区间。这里采用了tensorflow内置的tensorflow.image.convert_image_dtype操作,不仅执行了归一化,还可以转换数据类型为需要的tensorflow.float32数据类型。
冻结前面层参数
目标是使用预训练好的模型,因此,需要把最后的Linear 层由1000类,替换为2类。为了在训练中冻结前面层的参数,需要设置 required_grad=False。这样,反向传播训练梯度时,前面层的权重就不会自动更新了。训练中,只会更新最后一层的参数。
二、猫狗大战实战
成果先行:

实战过程
下载解压工具rar
!sudo apt-get install rar
将大赛给的数据包解压缩,把其中test文件夹放入./dogscats目录下,形成如下的文件目录结构。
dogscats/test/test/
至于为什么要加2个test文件夹,这是因为左边第一个test跟train,valid平行的,告诉程序应该找到这个文件夹下的文件作为测试集。而第二个test是为了适配我们的程序中dataset.ImageFolder函数,他要求载入的文件里面的目录结构需要有分类标签的文件夹。如训练集 dogscats/train/cat,dogscats/train/dog这

本文介绍了OUC2022秋季软件工程第四次实验——CNN实战,包括Colab上的迁移学习,使用VGG Model进行猫狗分类。内容涵盖数据下载与预处理、模型创建、参数冻结、训练与测试,以及深度学习流程和数值归一化的讨论。
最低0.47元/天 解锁文章
1005

被折叠的 条评论
为什么被折叠?



