利用现有的深度学习模型构建自己的模型

概括

本文主要是对已经预训练好的ImageNet图像识别模型进行微调( Fine-tune )。 从四个方面讲解:数据准备、训练模型、在测试集上验证准确率、 导出模型并对单张图片分类

一、微调原理

  • 若为分类模型,需要用符合数据集类别数的全连接层去改变原先模型最后的全连接层
  • 初始化权重参数使用训练好的参数,节省训练时间,有助于分类器性能的提高
  • 指定训练层数的范围,有三种方式
    只训练最后的改变全连接层(训练范围一定要包含这一层,因为原来模型参数不包含这一层参数)
    训练全部参数(这种方法的训练速度可能比较慢,但是能取得较高的性能,可以充分发挥深度模型的性能)
    训练部分参数(通常是固定浅层参数不变,训练深层参数。如固定 conv,conv2 部分的参数不训练,只训练 conv3,conv 4,conv 5,fc6,fc7,fc8 的参数)

二、使用slim微调模型

TensorFlow Slim Google 公司公布的一个图像分类工具包,不仅定
义了一些方便的接口,还提供了很多 ImageNet 数据集上常用的网络结构和
预训练模型。
在这里插入图片描述

三、数据准备

分两步,首先要将自己的数据集切分为训练集和验证集,训练集用于训练模型,
验证集用来验证模型的准确率,其次转为tfrecord格式(tensorflow数据格式)

定义训练数据

复制 flowers.py 文件内容到新建的satellite.py文件,修改第一处是 FILE PATTERN(定义了数据的文件名的格式),SPLITS_TO_ SIZES(训练集 、验证集的数量),NUM CLASSES(定义了数据集中国片的类别数目)。修改第二处为’image/format’。修改结束后,在同目录的 dataset factory. py 文件中注册satellite 数据库。

准备训练文件夹

三个文件夹,data,train_dir,pretrained文件夹
在这里插入图片描述

四、开始训练

在这里插入图片描述

参数解释

  • 如果不设 trainable scopes , 就会对模型中所有的参数进行训练,这里的设定表示只对
    Inception V3/ AuxLogits 两个变量进行微调,真他变 都保持不动
  • train_dir,为日志和checkpoint的保存位置
  • dataset_name 为数据集名字
  • dataset_dir 指定训练、数据集保存的位置
  • model_name 为使用的训练模型名称
  • checkpoint_path 为使用的预训练模型位置
  • batch_size 每步使用的 batch 数量
  • learning_rate 学习率
    在这里插入图片描述

五、验证模型准确率

在这里插入图片描述

参数解释

在这里插入图片描述

六、总结

本章简要介绍了微调神经网络的基本原理,接着详细介绍了如何使用tensorFlow Slim 微调预训练模型,包括数据准备、定义新的 datasets 文件、训练、 验证导出模型井测试单张图片等

猜你喜欢

转载自blog.csdn.net/qq_39751437/article/details/88878143