0
本文作者: AI研习社-译站 | 2018-09-17 15:03 |
本文为 AI 研习社编译的技术博客,原标题 Tensorflow Vs Keras? — Comparison by building a model for image classification,作者为DataTurks: Data Annotations Made Super Easy。
翻译 | shunshun 整理 | 凡江
是的,标题中的问题在数据科学家之间的谈话中是很常见。有人说TensorFlow更好,有人说Keras更好。让我们看看这个问题在图像分类的实际应用中的答案。
在此之前,先介绍Keras和Tensorflow这两个术语,帮助你在10分钟内构建强大的图像分类器。
Tensorflow是开发深度学习模型最常用的库。它是有史以来最好的库,在日常实验中被许多极客选择。如果我说Google已经将Tensor Processing Units(TPU)用于处理张量,你能想象吗?是的,他们已经这样做了。他们提出了一个名为TPU的独立实例,它具有最强大的功率驱动计算能力来处理tensorflow的深度学习模型。
我现在将帮助你使用tensorflow创建一个功能强大的图像分类器。等等!什么是分类器?这只是一个简单的问题,你向你的tensorflow代码询问,给定的图像是玫瑰还是郁金香。所以,首先的首先,让我们在机器上安装tensorflow。官方文档有两个版本,即CPU和GPU版本。对于CPU版本:
请注意,我是在GPU上而非CPU上进行实验后才写的这篇博客。这里给出了详细的GPU安装。
现在,让我们采用Google的Tensorflow进行实验来训练模型。谷歌的这个仓库有许多令人惊叹的处理图像的简单实验的脚本。它非常简洁,足以满足我们的目的。还记得前面我用过“强大”这个词吗?是的,当我们使用称为迁移学习的方法时,这个词就会生效。迁移学习是一种有效的方式,它使用预训练模型,这些模型已经训练了几天或几周,然后改变最后一层以适应我们自己的类别。
Inception V3是一个非常好的模型,在[2015 ImageNet Challenge](http://image-net.org/challenges/LSVRC/2015/results)图像分类竞赛中排名第二。当数据集的每个类别具有较少图像数量时,它被提及为迁移学习的最佳网络。
Inception V3
现在克隆git仓库:
现在,你可以选择图像。你所要做的就是以下面的方式存储数据集文件夹。
FLOWER DATA
它看起来应该像上面图那样(忽略image.py)。通过下面代码获得flower_photos文件夹:
创建数据
你可以使用任何你喜欢的图像。越多越好(目标是几千)。向上面文件夹格式那样以类别将它们分开,并确保它们在一个名为tf_files的文件夹中。
你可以下载已经存在的有多种任务使用的数据集,如癌症检测,权力的游戏中的人物分类。这里有各种图像分类数据集。
或者,如果你有自己独特的用例,则可以为其创建自己的数据集。你可以从网上下载图像并立即制作大型数据集,使用像Dataturks这样的注释工具,你可以手动上传图像并标记图像。更好的是,Dataturks的输出可以很容易地用于构建tf_files。
使用Dataturks创建数据
我发现了一个很棒的插件,可以在Google Chrome上批量下载图像。这个和Dataturks将使构建训练数据变得轻而易举。链接在这里。
您可以尝试使用dataturks的image_classification工具执行此操作。这里该工具提供的最佳功能是,如果我们有一个非结构化数据集,其中所有图像都在一个文件夹中。通过手动标记图像的类别,你可以下载一个json文件,该文件包含嵌入其中的类的图像的所有详细信息。然后使用下面给出的keras和tensorflow脚本:
训练
现在是时候训练模型了。在tensorflow-for-poets-2文件夹中,有一个名为scripts的文件夹,它包含重新训练模型所需的一切。retrain.py有一种特殊的裁剪和缩放图像的方式,非常酷。
然后使用以下命令训练,选项名称本身描述所需的训练路径的位置。
这将下载inception模型并使用training文件夹和给定的参数训练最后一层。我使用12GB Nvidia Tesla k80和7GB Vram在GCP实例上训练了4000步。
训练时80%数据集用作训练,20%用作测试,我们可以看到,它给出了91%的test_accuracy。现在是时候测试了!我们在`tf_files/`中有一个.pb文件,可用于测试。`label_image.py`中添加了以下更改:
上面的代码将帮助我们绘制正在测试的图像的准确性并保存它。对于rodom图像的置信度百分比如下所示
下面显示了几个测试图像的输出
包含所有类别的少量输出的拼贴画
正如我们所看到的,结果对于所述任务来说真的很好了。
Keras是一个基于TensorFlow构建的高级API(也可以在Theano之上使用)。与Tensorflow相比,它更加用户友好且易于使用。如果我们是所有这些深度学习的新手,并想从头开始编写一个新模型,那么我会建议使用Keras,因为其易读性和易写性。可以通过下面指令安装:
甚至这个东西都包含了tensorflow,所以CPU v/s GPU兼容性变化也将适用于此。
因为,我们必须执行使用inception模型的迁移学习对花进行分类的相同任务,我已经看到Keras以标准格式加载模型,如API编写的那样。
Keras有一种加载数据集的标准格式,即我们不是直接在数据集文件夹中提供文件夹,而是手动划分训练和测试数据,并按以下方式排列。我使用了我在tensorflow部分下载的相同数据集,并按照以下说明进行了一些更改。
它看起来应该如下所示:
TRAIN FOLDER
至于,我们现在已完成数据集的设置,是时候进行训练了。我已经写了一小段代码来进行下面的训练:
想要继续阅读并且查看更多代码、链接和参考文献?
戳链接:http://www.gair.link/page/TextTranslation/997
雷锋网雷锋网雷锋网
A研习社每日更新精彩内容,点击链接http://www.gair.link/page/translate即可观看更多精彩内容:
如何利用深度学习和 Pytorch 实现推荐系统
想了解 MIT 发布的最新编程语言 Julia,这篇文章就够了
开发者必看:8月 Python 热门开放源码
亚马逊、谷歌、微软等各家公司人脸识别对比
斯坦福CS231n李飞飞计算机视觉经典课程(中英双语字幕+作业讲解+实战分享)
等你来译:
使用 Python 完成自动特征工程——如何自动创建机器学习特征
利用 Pytorch 和 CoreML 建立一个风格转换的 iOS 程序
10个 Python 中常见的安全问题以及如何避免他们
雷峰网原创文章,未经授权禁止转载。详情见转载须知。