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
将