Tensorflow实现猫狗大战AlexNet

这一篇博客利用TensorFlow实现了VGG16,其中在处理数据的时候将图片数据集转化为TensorFlow专用格式。但是对于某些容量非常庞大、数据量非常多的数据集来说,将其转换为TFRecords格式是一个非常浩大的工程,而且往往由于原始的数据集和转换后的数据集容量过大,使得加载和读取消耗更多的资源,从而引起一些列的问题。
今天介绍另一种数据处理方式:图片地址数据集转换为TensorFlow专用格式,即读取生成batch后的地址。

1. 项目架构

数据集地址:https://www.kaggle.com/c/dogs-vs-cats
数据集分为训练集与测试集,直接解压放到项目中。
先看项目架构:
Tensorflow实现猫狗大战AlexNet_第1张图片

2. 文件说明

文件 功能
train 存放训练集图片
test1 存放测试集图片
pre.py 将训练集图片 resize 成统一大小
train_temp 存放pre.py处理后的统一大小的图片
create_and_read_TFRecord2.py 将数据集按类别分类,将分类好的图片放进 data 文件夹
data 存放分类好的图片,该文件夹下有 cat / dog 两个子文件夹
training.py 网络训练过程
test.py 对网络训练结果进行测试

3. 训练过程

  1. 先运行 pre.py 文件,将训练集图片 resize 成同样大小。
  2. 运行 create_and_read_TFRecord2.py,将图按类别分类(便于后面打标签与分batch)。
  3. 再运行training.py进行训练。
  4. 训练2000轮结果,一般在1500轮收敛。
    Tensorflow实现猫狗大战AlexNet_第2张图片

4. 项目源码

https://github.com/dhuQChen/AlexNet

作为练习,读者可以:

  1. 使用BN正则化处理(注意:BN的位置应在Relu之前;衰退率decay的大小应合适;is_training训练时设置为True,评估时设置为False,否则会导致预测为同一类别。)
  2. 对源码按照上一篇博客代码组织架构对本案例代码进行模块化。
  3. 对17 Flowers数据集使用AlexNet进行分类。

你可能感兴趣的:(DeepLearning)