迁移学习:如何使用TensorFlow对图像进行分类

640?wx_fmt=jpeg

导言


在机器学习环境中,迁移学习是一种技术,使我们能够重用已经训练的模型并将其用于另一个任务。图像分类是将图像作为输入并为其分配具有概率的类(通常是标签)的过程。这个过程使用深度学习模型,即深度神经网络,或卷积神经网络(CNN)。CNN由多个层组成,这些层中的每一个都负责学习和识别特定特征。下层可以识别边缘等。最终确定图像类别。


本文将逐步介绍如何使用TensorFlow进行迁移学习。


安装TensorFlow


第一步,是配置本文使用的环境。有几种方法可以开始使用TensorFlow,最简答快速的方法是使用Docker:

640?wx_fmt=png

安装完docker后,即可安装TensorFlow。可以使用docker hub下载TensorFlow。

640?wx_fmt=png

选择适合你的版本。在本文中,我们使用的是1.12.0版本。devel发行版添加了一些其他功能,我们将在本文的后面使用它们。要安装TensorFlow docker镜像,请键入:

 
 
docker pull tensorflow/tensorflow:devel-1.12.0

等待安装完成,这样我们就具备的所需要的环境。

图像数据集


安装TensorFlow后,可以选择我们想要用来训练模型的数据集。有几个图像数据集可用。有趣的是,即使更改了图像数据集,也可以使用相同的操作步骤。要创建TensorFlow模型,我们将使用猫的图像数据集。用于训练机器学习模型和应用迁移学习的完美图像数据集。让我们下载图像数据集并解压缩。

创建目录图像结构


为了应用迁移学习,需要根据猫的品种对图像进行分组。让我们创建一个名为tensor的新目录,并在此目录下建一个新目录cat-images。图像结构应该是:

640?wx_fmt=png

现在,启动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控制台。


选择图表,将能够看到模型:

640?wx_fmt=png


现在,在顶部菜单上选择SCALARS以评估模型,下图展示了模型的准确性:

640?wx_fmt=png


训练精度是系统用于训练模型的图像的分类精度。验证准确性是训练过程中未使用的图像的准确性。验证准确性是模型的“真实”准确度。通常,它应该小于训练精度。


如果训练精度高于验证精度,则创建的模型过度拟合。这意味着该模型不能很好的概括测试数据,在相反的情况下,模型是不适合的,所以应该对其进行改进。


下图显示了entropy,这条曲线应该是下降的

640?wx_fmt=png


如何测试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

我们用下图来测试模型:

640?wx_fmt=jpeg

结果如下所示:

640?wx_fmt=png

如图所示,模型正确的检测出了猫的品种。


640?wx_fmt=jpeg

长按二维码 ▲

订阅「架构师小秘圈」公众号

如有启发,帮我点个在看,谢谢↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值