Windows10+TensorFlow2 Tensorflow Slim分类 Flower数据集

Tensorflow Slim github:https://github.com/tensorflow/models/tree/master/research/slim

实践环境:Win10+Python3.6+Tensorflow2.1.0+CUDA10.1+cudnn7.6+NVIDIA Quadro P2200

查看当前tensorflow编译的Python文件的文件名是build_info.py,打开可以看到当前tensorflow使用的CUDA和cudnn版本,其完整的文件路径为:
D:\Program Files\Anaconda3\envs\tensorflow-gpu\Lib\site-packages\tensorflow_core\python\platform
D:\Program Files\Anaconda3:是我使用的Conda3环境的主目录;
*\envs:是虚拟环境所在的目录;
*\tensorflow-gpu:是我当前安装TensorFlow的Conda环境目录,文件夹与Conda环境名同名;
*\Lib:Conda环境的库文件目录;
*\site-packages:安装的Python库;从字面意思上来看,就是“网站-包”,实际上就指的是从网上下载安装的Python包了;
*\tensorflow_core:TensorFlow的核心组件,(其实还有一个名为TensorFlow的文件夹,不过可能因为编译跟核心功能相关,所以放在了核心组件的文件夹中);
*\python:TensorFlow中于Python相关的文件;
*\platform:TensorFlow的Python配置与平台相关的文件,(因为TensorFlow是一个多平台的深度学习函数库);
然后就找到build_info.py文件了,打开文件就可以查看当前版本TF的编译使用的CUDA和cuDNN的版本信息了;

参考链接:TensorFlow——如何查看当前版本TF编译使用的CUDA和cuDNN的编译版本

注意:最好使用conda install tensorflow-gpu,会帮你装好对应的CUDA和cudnn,我用一开始用pip安装后,运行时出现了报错:

Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.

参考链接:TensorFlow框架This is probably because cuDNN failed to initialize 解决对策整理和验证

1 安装TF-slim image models library

在这里插入图片描述
直接点击Code下载zip格式文件保存至指定的文件夹并解压
在这里插入图片描述
打开research文件夹找到slim文件夹,里面就是TF-Slim图像模型库了
在这里插入图片描述

2 准备数据集

对于每个数据集,我们需要下载原始数据并将其转换为TensorFlow的原生TFRecord格式。我用的是Flower数据集,下面我们将演示如何为Flowers数据集做到这一点。
官方github给的是这个:

$ DATA_DIR=/tmp/data/flowers
$ python download_and_convert_data.py \
    --dataset_name=flowers \
    --dataset_dir="${DATA_DIR}"

这个在ubuntu中可直接运行,但windows要稍作调整,windows命令如下:

python download_and_convert_data.py ^
--dataset_name=flowers ^
--dataset_dir=/tmp/data/flowers

这个脚本里包含了数据集的下载和格式转换,不用另外去下载了。
运行结束之后会在你的dataset_dir路径下生成以下文件,可以看到分成了训练集和验证集,训练集用来训练模型,验证集用来评估我们训练好的模型:
在这里插入图片描述

注意:download_and_convert_data.py只支持对cifar10,flowers,minist三个数据集的下载和格式转换

3 训练模型

windows下训练的代码为

python train_image_classifier.py ^
--train_dir=E:\ZLW\tensorflow_model\models-master\research\slim\train_log ^
--dataset_name=flowers ^
--dataset_split_name=train ^
--dataset_dir=E:\ZLW\tensorflow_model\models-master\research\slim\DATA_DIR ^
--model_name=inception_resnet_v2 ^
--max_number_of_steps=500 ^
--batch_size=16 ^
--learning_rate=0.0001 ^
--learning_rate_decay_type=fixed ^
--save_interval_secs=60 ^
--save_summaries_secs=60 ^
--log_every_n_steps=10 ^
--optimizer=rmsprop ^
--weight_decay=0.00004

train_dir根据自己的路径进行定义,dataset_dir就是数据集存放的路径。
注意batch_size定义的大小,我一开始直接复制的batch_size=32,结果报错
在这里插入图片描述
从shape[32,1088,17,17]可以看出,代码中使用的batch_size是32,我改小为16,再次执行,运行正常,问题解决。
参考链接:运行TensorFlow报错ResourceExhaustedError: OOM when allocating tensor with shap * and type float *

不过又出现了另一个错误:

from tensorflow.python.tools import module_util as _module_util ModuleNotFoundError: No module named ‘tensorflow.python.tools’; ‘tensorflow.python’ is not a package

这就要检查一下
D:\Program Files\Anaconda3\envs\tensorflow-gpu\Lib\site-packages
与h5py这个包有关
解决方法:手动删除h5py的包,conda install h5py,重新安装。

接下来运行正常开始训练,训练完毕后,会在你之前指定的目录生成以下文件:
在这里插入图片描述

4 评估模型性能

下面是评估的windows命令行语句例子:

python eval_image_classifier.py ^
  --checkpoint_path=E:\ZLW\tensorflow_model\models-master\research\slim\train_log ^
  --eval_dir=E:\ZLW\tensorflow_model\models-master\research\slim\train_log ^
  --dataset_name=flowers ^
  --dataset_split_name=validation ^
  --dataset_dir=E:\ZLW\tensorflow_model\models-master\research\slim\DATA_DIR ^
  --model_name=inception_resnet_v2

checkpoint_path就是上述指定的训练生成记录的文件夹
eval_dir路径同上
dataset_dir就是数据集tfrecord的文件夹

我只迭代了500次,效果很差,准确率只有22%。
在这里插入图片描述
以上就是对Flower数据集的分类踩坑记录,后续会训练自己的数据集。

参考链接:Tensorflow Slim分类教程(1):以Flower数据集为例

最后,tensorflow2没有contrib类

所以import那边要改一些东西

slim问题
将原来的from tensorflow.contrib import slim
改为import tf_slim as slim(需要先在终端pip install tf_slim

quantize问题
将原来的 from tensorflow.contrib import quantize as contrib_quantize
改为 from tensorflow.compat.v1 import quantize as contrib_quantize

HParams问题
将原来的 tf.contrib.training.HParams
改为from tensorboard.plugins.hparams import api as contrib_training
这样就可以用contrib_training.HParams

在TF 2.0中没有了tf.contrib.training.HParams,但有一个新的API叫tensorboard.plugins.hparams.api,它包含一个类HParam
这个指南描述了新API的用法:Hyperparameter Tuning with the HParams Dashboard

tensorflow2.0默认启用Eager Execution,会报错

TypeError: An op outside of the function building code is being passed a “Graph” tensor.

将tf.compat.v1.disable_eager_execution()写进train程序
参考链接:诡异错误笔记TypeError: An op outside of the function building code is being passed a “Graph” tensor.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值