导言
在机器学习环境中,迁移学习是一种技术,使我们能够重用已经训练的模型并将其用于另一个任务。图像分类是将图像作为输入并为其分配具有概率的类(通常是标签)的过程。这个过程使用深度学习模型,即深度神经网络,或卷积神经网络(CNN)。CNN由多个层组成,这些层中的每一个都负责学习和识别特定特征。下层可以识别边缘等。最终确定图像类别。
本文将逐步介绍如何使用TensorFlow进行迁移学习。
安装TensorFlow
第一步,是配置本文使用的环境。有几种方法可以开始使用TensorFlow,最简答快速的方法是使用Docker:
安装完docker后,即可安装TensorFlow。可以使用docker hub下载TensorFlow。
选择适合你的版本。在本文中,我们使用的是1.12.0版本。devel发行版添加了一些其他功能,我们将在本文的后面使用它们。要安装TensorFlow docker镜像,请键入:
docker pull tensorflow/tensorflow:devel-1.12.0
等待安装完成,这样我们就具备的所需要的环境。
图像数据集
安装TensorFlow后,可以选择我们想要用来训练模型的数据集。有几个图像数据集可用。有趣的是,即使更改了图像数据集,也可以使用相同的操作步骤。要创建TensorFlow模型,我们将使用猫的图像数据集。用于训练机器学习模型和应用迁移学习的完美图像数据集。让我们下载图像数据集并解压缩。
创建目录图像结构
为了应用迁移学习,需要根据猫的品种对图像进行分组。让我们创建一个名为tensor的新目录,并在此目录下建一个新目录cat-images。图像结构应该是:
现在,启动TensorFlow图像:
docker run -it -p 6006:6006 -v /Users/francesco/Desktop/tensor/:/tensor_flow your_tensorflow_docker_name6006
-v /Users/francesco/Desktop/tensor/:/tensor_flow
your_tensorflow_docker_name
使用TensorFlow创建机器学习自定义模型
我们准备创建自定义模型。让我们拷贝存储库tensorflow-for-poets:
git clone https://github.com/googlecodelabs/tensorflow-for-poets-2
通过这种方式,我们可以使用脚本轻松创建模型,现在我们就开始训练模型了:
python tensorflow-for-poets-2/scripts/retrain.py --model_dir=/tensor_flow/inception-v3 --output_graph=/tensor_flow/cats_retrained.pb --output_labels=/tensor_flow/cats_labels.txt --image_dir=/tensor_flow/cat-images/ --bottleneck_dir=/tensor_flow/cats_bottleneck-2/scripts/retrain.py
--model_dir=/tensor_flow/inception-v3
--output_graph=/tensor_flow/cats_retrained.pb
--output_labels=/tensor_flow/cats_labels.txt
--image_dir=/tensor_flow/cat-images/
--bottleneck_dir=/tensor_flow/cats_bottleneck
有以下几点需要注意:
--model_dir
是存储模型的位置(在本例中为tensor_flow)--output_graph
是我们将创建的图表名称(cats_retrained.pb)--output_labels
是标签的名称(cats_labels.txt)--image_dir
是存储图像以训练模型的位置--bottleneck_dir
是创建bottleneck的位置
【Tips】:“bottleneck”是一个非正式的术语,经常在实际进行分类的最终输出层之前使用该层。
这一步骤需要大量的时间,具体取决于电脑的功能和使用的迭代次数。
使用TensorFlow Board分析模型
当机器学习模型准备就绪,且训练过程完成,我们就可以分析模型。这是非常重要的一点,因为它可以评估我们创建的模型。输入以下命令:
tensorboard --logdir /tmp/retrain_logs/
这条命令是运行TensorFlow Board。使用浏览器,打开dashboard,键入:
localhost:6006以访问Web控制台。
选择图表,将能够看到模型:
现在,在顶部菜单上选择SCALARS以评估模型,下图展示了模型的准确性:
训练精度是系统用于训练模型的图像的分类精度。验证准确性是训练过程中未使用的图像的准确性。验证准确性是模型的“真实”准确度。通常,它应该小于训练精度。
如果训练精度高于验证精度,则创建的模型过度拟合。这意味着该模型不能很好的概括测试数据,在相反的情况下,模型是不适合的,所以应该对其进行改进。
下图显示了entropy,这条曲线应该是下降的。
如何测试TensorFlow模型
当我们对模型满意,就可以测试它了:
bazel-bin/tensorflow/examples/label_image/label_image --graph=/tensor_flow/cats_retrained.pb --image=/tmp/lab1.jpg --input_layer=Mul --output_layer=final_result --labels=/tensor_flow/cats_labels.txt/tensor_flow/cats_retrained.pb
--image=/tmp/lab1.jpg
--input_layer=Mul
--output_layer=final_result
--labels=/tensor_flow/cats_labels.txt
我们用下图来测试模型:
结果如下所示:
如图所示,模型正确的检测出了猫的品种。
长按二维码 ▲
订阅「架构师小秘圈」公众号
如有启发,帮我点个在看,谢谢↓