因为是 transfer learning 操作,所以直到网络的bottleneck部分之前都不需要改变参数和训练。只需要传入图片数据到网络中计算得到结果。再拿到这个结果到后面的全连接层进行训练。
所以训练的内容不多,迭代200次左右就可以达到要求。
1 准备模型文件
.pb模型文件下载地址:
http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz
解压后得到如下内容:
2 准备retrain训练工程目录
1、在D:/Tensorflow目录下新建retrain文件夹。
在里面新建以下文件夹:
bottleneck:存放瓶颈部分输出的数据,用于全连接层的训练
data
└ train:存放用于训练的用文件夹分类好的图片
images:存放用于测试的单个图片
2、把image_retraining中的retrain.py文件拖过来(注意:这个文件不能用最新版的)
3、新建retrain.bat文件,内容如下1
2
3
4
5
6
7
8python retrain.py ^
--bottleneck_dir bottleneck ^
--how_many_training_steps 100 ^
--model_dir D:/Tensorflow/models/inception/ ^
--output_graph output_graph.pb ^
--output_labels output_labels.txt ^
--image_dir data/train/
pause
文件架构如下图:
3 执行retrain.bat脚本,进行transfer learning
跌倒200次训练完成后,会在当前目录生成output_graph.pb
和output_labels.txt
两个文件,至此训练完成。可以用这个pb模型文件来测试分类了。
4 测试分类效果
自己写一个测试代码,用自己的图片测试下分类效果:
1 | import tensorflow as tf |
1 | lines = tf.gfile.GFile(RETRAIN_DIR + "output_labels.txt").readlines() |
D:/Tensorflow/retrain/images/111.jpg
pet (score = 0.80940)
flower (score = 0.19060)
D:/Tensorflow/retrain/images/222.jpg
flower (score = 0.99097)
pet (score = 0.00903)