这篇博客主要参考的是keras官方文档中的“面向小数据集构建图像分类模型”。本文记录了学习这篇文章遇到的问题和自己探索的一些方法。官方文档的大致思路是:首先利用去掉全连接层的VGG-16网络,得到数据集的bottleneck feature,然后自己设计几层全连接层,对其进行训练,最后再微调最后面的几层卷积层。
实现一个模型的流程大致如下:1.数据的读取和预处理部分(包括对训练数据的提升和扩充、生成batch等)2.网络的构建3.对模型的编译(挂载上目标函数、优化函数及相关的一些学习率等超参数)4.模型的训练。下面我逐条说明实现的过程中遇到的一些问题和我自己的浅薄思考:
一、数据读取和处理部分
1.官方文档采用的读取数据的方式是ImageDataGenerator.flow_from_directory():从文件夹中读取数据,并对数据进行预处理和提升,生成batch数据。文件路径下要有cat和dog两个子文件夹,表示两个类别。类别的标签是按照字母顺序生成的,cat是0,dog是1。需要注意的是该路径下必须要有一个文件夹,当我用该函数读取测试集数据时,直接将所有图片放在了路径下,发生了报错。
2.从kaggle上下载的train文件中只有一个文件夹,猫和狗混合在了一块,应该将其分到两个文件夹中。利用os.listdir(‘dirname’)语句,返回指定目录下所有文件的目录名。
import shutil
TRAIN_DIR=''
cat_target_file=''
dog_target_file=''
train_dogs_name=[i for i in os.listdir(TRAIN_DIR)if 'dog' in i]
train_cats_name=[i for i in os.listdir(TRAIN_DIR)if 'dog' in i]
for i in train_dogs_name:
src=TRAIN_DIR+i
dst=dog_target_file+i
shutil.copyfile(src,dst)
for i in train_cats_name:
src=TRAIN_DIR+i
dst=cat_target_file+i
shutil.copyfile(src,dst)

本文通过实践介绍如何利用预训练的VGG-16模型进行图像分类任务,重点讲解数据处理、模型构建、权重加载及微调等关键步骤。
最低0.47元/天 解锁文章
2108





