ximingri 2019-05-16
点击上方关注,All in AI中国
本文将介绍如何使用迁移学习使用TensorFlow机器学习平台对图像进行分类。
在机器学习环境中,迁移学习是一种技术,使我们能够重用已经训练的模型并将其用于另一个任务。 图像分类是将图像作为输入并为其分配具有概率的类(通常是标签)的过程。 该过程使用深度学习模型,即深度神经网络,或更详细的卷积神经网络(CNN)。 CNN由多个层组成,这些层中的每一个都负责学习和识别特定特征。 下层可以识别零件,边缘等。 最终图层确定图像类别。
现代图像识别模型具有数百万个参数,并且需要大量计算能力来训练模型。 使用迁移学习,可以使用自定义图像集重新训练网络的最后一层,并重用所有剩余模型而无需更改。 使用迁移学习可以大大减少训练模型所需的时间。 机器学习的另一个有趣的好处是我们不需要大型图像数据集来训练新模型,因为几乎所有模型都已经过训练。
本文将介绍如何使用TensorFlow进行转移学习。
安装TensorFlow
第一步是设置我们将在本文中使用的环境。有几种方法可以开始使用Tensorflow,最简单快速的方法是使用Docker:
完成docker安装后,即可安装TensorFlow。
使用Tag,您可以选择您喜欢的版本。在本教程中,我们使用的是1.12.0版本。devel发行版添加了一些其他功能,稍后将在本教程中使用它们。要安装Tensorflow docker镜像,请键入:
docker pull tensorflow / tensorflow:devel-1.12.0
安装完成,准备开始运行TensorFlow。
图像数据集
安装TensorFlow后,就可以选择我们想要用来训练模型的数据集了。有几个图像数据集可用。即使更改了图像数据集,也可以使用相同的步骤。要创建TensorFlow模型,需要使用猫图像数据集。训练模型,以便它能识别猫的品种。牛津IIIT宠物数据集中有一个猫狗图像数据集。该图像数据集包含狗和猫的图像,是用于训练机器学习模型和应用迁移学习的完美图像数据集。下载图像数据集并解压缩。
创建目录图像结构
为了应用迁移学习,有必要根据猫品种对图像进行分组。创建一个名为的新目录tensor,并在此目录下调用一个新目录cat-images。图像结构应该是:
现在,启动TensorFlow图像:
docker run -it -p 6006:6006 -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
有几点需要注意:
--model_dir 是存储模型的位置(在本例中为tensor_flow)
--output_graph 是即将创建的图表的名称(cats_retrained.pb)
--output_labels 是标签的名称(cats_labels.txt)
--image_dir 是存储图像以训练模型的位置
--bottleneck_dir 是创造瓶颈的地方
'瓶颈'是一个非正式术语,人们经常在实际进行分类的最终输出层之前使用该层。
此步骤需要大量时间,具体时间长短取决于电脑功能和使用的迭代次数。
使用TensorFlow Board分析模型
机器学习模型准备就绪并且培训过程完成后,我们就可以分析模型了。我们可以评估创建的模型。输入以下命令:
tensorboard --logdir /tmp/retrain_logs/
它运行TensorFlow,使用浏览器,我们可以打开仪表板。键入:localhost:6006以访问Web控制台。
选择图表,您将看到模型:
在顶部菜单上选择SCALARS以评估模型
列车精度是系统用于训练模型的图像分类精度。验证精度是指训练过程中未使用的图像的精度。验证精度是模型的"真实"精度。通常,它应该小于列车精度。
如果列车精度高而验证精度低,则创建的模型过度拟合。这意味着该模型不能很好地概括测试数据。相反的情况下,模型也是不合适的,所以我们可以改进它。
下图为熵,该曲线应该减少。
如何测试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
用下面的图像来测试模型:
结果如下所示:
如您所见,模型正确检测到了猫的品种。
摘要
希望您通过本文了解了有关如何使用迁移学习创建自定义模型的知识。如果要在其他方案(例如移动应用程序)中使用此模型,则应考虑使用其他体系结构模型(即Mobilenet)。
编译出品