Tensorflow基础实验
1 介绍
Tensorflow是用于数值计算的开源库,专门从事学习应用.在这个CodeLabs中,您将学习如何在单个机器上安装和运行Tensorflow,并尝试训练一个简单的分类器来分类花卉图像.
那么我们接下来要做什么呢?
在这个实验中,我们将进行转移学习,这意味这我们将会以已经训练过的模型为基础,通过对这个模型进行再训练来解决相似的问题.为什么要这么做呢?这是因为从头开始进行深度学习往往需要好几天,但是进行转移训练只需要一小会就能完成这件事情.
我们即将使用的模型是基于ImageNet大型视觉挑战赛的数据进行训练的,这个模型能够区分1000种不同的物体,如达尔马提亚狗或洗碗机,你可以通过选择不同的模型的构架,权衡解决问题的速度,大小和准确性.
你会学到什么:
如何用Python和Tensorflow来训练图像分类器
如何使用训练有素的分类器对图像进行分类
你需要什么:
- 对Linux命令的基本了解
2 设置
2.1 安装Tensorflow
在我们开始Tensorflow之前,您需要安装Tensorflow(CodeLabs测试机已经准备好了相关的开发环境)
本次CodeLabs为了防止网络不好带来的问题,已经提前将所有的资料下载好,并放在桌面上了的CodeLabs资料文件夹下
2.2 创建你的个人工作目录
为了防止其他人的项目干扰,我们首先要新建一个自己的文件夹用来保存自己的工程文件.

2.3 下载工程文件
- 方案一 : 克隆git仓库
在工程目录下右键打开GitBash

会弹出如下的对话框,以下所有要输入的命令都是在Gitbash中进行的

|
|
成功示意图

- 方案二 : 如果文件下载缓慢或者无法下载你可以直接从桌面上的CodeLabs资料中找到要下载的文件内容
3 下载训练集
3.1 下载花卉训练集
在开始训练前,您需要一套数据来训练您的模型,我们创建了供大家使用的花卉数据集.你可以通过下面两条命令来下载这些照片.
- 方案一 : 在GitBash中通过命令行下载花卉数据并且解压
|
|
- 方案二 : 解压CodeLabs中的资料,放置在 tf_files/flower_photos 下

3.2 检查训练集是否按照要求放置在制定文件夹下
你需要将相关的数据集放到您的工作目录中,您可以通过使用一下命令确认照片是否已经放到目录中.(请在项目文件夹下打开Gitbash)
|
|

4 (Re)训练神经网络
4.1 模型的选择与配置
我们提供了一个训练脚本,用来重新训练Inception V3模型或MobileNet模型.在这个联系中,我们将会使用MobileNet模型.主要区别在于Inception V3模型针对精度做了优化,而MobileNet模型则是更为小巧和高效.
初始版本的V3在ImageNet上的初始精度为78%,但是他的模型有85MB这么大,这笔最大的MobileNet模型还要大,识别精度为70.5%的MobileNet模型仅有19MB大.
选择训练神经网络的配置
输入图像的分辨率 : 128 , 160 , 192 or 224px (高分辨率的图像识别需要更多的处理时间,但是准确度会更高,在这里我们推荐使用224px)
该模型与MobileNet模型的压缩比 : 1.0 , 0.75 , 0.5 or 0.25 (压缩的越多,识别速度越快,但是越不准确,在这里我们推荐使用0.5作为压缩比例)
Topic1 : 使用推荐配置,通常只需要几分钟来重新训练笔记本电脑,你可以通过shell来设置这些变量
|
|
Topic2 : 下图的y轴为精度,x轴为所需计算数,圆圈的面积为模型的大小,园的左下角是128px的图片,右上角是224px

4.2 开启TensorBoard可视化训练平台
在开始训练之前,我们需要先启动TensorBoard(Tensorflow配套的监督和检查工具).您可以用它来监督培训进度.
|
|
输出如下图所示

并且你可以通过浏览器访问 http://localhost:6006 查看到TensorBoard的页面,在进行training的时候网页会自动显示训练进度

Topic1 : 如果已经开启了TensorBoard请先关闭其他的TensorBoard或者6006端口的进程
|
|
4.3 训练前的额外准备
为什么说是额外的准备呢,这是因为学校网络不好带来的额外步骤.在训练的过程中他会自动搜索下载所需的模型,并进行reTraining.

这个时候我们需要自行下载训练用的模型,放在/tf_files/models下

4.4 加载处理后的图片数据集(可选)
在进行机器学习前,我们的Python程序会先将我们的图片转换成机器看的数组,这一步大约要话费3~4分钟左右,等不及的同学可以从桌面CodeLabs资料中解压bottlenecks压缩包,讲文件放置在/tf_files/bottlenecks/

4.5 开始训练
如同引言所属,ImageNet模型是具有百万个参数的网络,可以用来区分大量的物品,我们只是训练该神经网络的最后一次,所以训练将会在比较短的时间内结束.
使用一下命令开始训练(注意–summaries_dir选项,该选项是用来将训练进度报告发送到TensorBoard用来显示训练进度的)
如果遇到错误可以查看下文Topic的内容,如果觉得数据加载的过程太慢,可以考虑按4.4可选步骤直接使用处理好的数据
|
|
该脚本将会下载预训练的模型,并在添加一个新的最后一层,训练您下载的花卉照片.
数据处理

开始训练

这个时候TensorBoard已经可以看到训练的过程了

Topic1 : 如果您使用命令后出现下列错误信息,请重新输入IMAGE_SIZE和ARCHITECTURE,在不关闭Gitbash的基础上重新运行

|
|
5 使用再培训模型
在培训模型将会写入一下两个文件
tf_files/retrained_graph.pb (从网络上下载的模型,以及刚才我们重新训练的花卉层)
tf_files/retrained_labels.txt (它是一个包含标签的文本文件)
你可以使用我们提供的 label_image.py , 您可以用他来测试你训练好的模型
|
|
你可能会得到如下结果,该结果表示,该图片为雏菊的可能性最高
|
|

附录3 : 参考文献
- TensorFlow for Poets by Pete Warden
- retraining tutorial by Google
- Codelabs - tensorflow-for-poets by Google