近几年火热的AI领域吸引了众多有志之士加入,在一段时间的学习之后,不知道你是否有一个疑惑:我能够用AI来做点什么呢?

就拿AI最常见的应用而言,人脸识别已经相当成熟,由巨头把持,围棋AI也有好几个开源实现,都是重量级的玩家在玩,医疗领域涉及太广,不是个人能hold住的。还有我们能够想到的领域,如机器翻译、无人驾驶、搜索引擎、美颜…好像都被别人早早布局,现在进入是不是太晚了?

别着急,在机器学习领域,有一个重要的定理叫做 “没有免费的午餐”定理 (No Free Lunch Theorem,简称NFL定理)。NFL定理是这样的,对于一个学习算法Ea,若它在某些问题上比学习算法Eb好,则必然存在另一些问题,在那里Eb比Ea好,这个结论对任何算法均成立。换而言之,机器学习领域,不存在一种算法,对所有问题都有效。

在面对具体的问题时,我们总需要选择算法、训练算法、针对具体问题进行调优,这也是大多数从事机器学习行业的人的工作。下面我就以一个图片分类器的构建为例,说明如何构建一个属于自己的AI模型。

说到图片分类器,有的同学可能又存在疑问?市面上不是已经有很多模型了吗?比如拍照识花、给猫狗图片分类等等。对的,本文就是在这些模型的基础上,训练出能够识别我常喝的两种牛奶的分类器(牛顿不是也说过,要站在巨人的肩膀上。。。)。我常喝的牛奶是长这样的:

要构建自己的图片分类器,首先需要数据,数据不能太少。在深度学习领域,数据往往比算法更重要(不是我说的,吴恩达说的。。。)。在本问题中,我们需要的数据就是有关这两种牛奶包装的图片。一种方法是编写脚本,从网络上抓取,还有一种笨办法,自己拿手机从各个不同角度拍摄。第三种办法是对着这两种牛奶录一段视频,然后通过软件将一帧帧的图像保存为图片,该方法也不是我想到的,你可以看这段视频了解一下。

我选择第三种录视频的方法来生成我的训练数据。

数据生成

首先使用手机拍一段视频,导入到电脑,然后通过软件保存图像。在ubuntu上可以使用ffmpeg软件来完成。

sudo apt-get install ffmpegffmpeg -i VID_20180520_162407.mp4 -r 1 milk_photos/arla/%03d.jpg

训练模型

我们基于ImageNet模型训练自己的模型,这是一个大型视觉识别挑战数据集上训练的模型,可以识别大约1000中物体的类别。

安装tensorflow

pip install --upgrade "tensorflow==1.7.*"

克隆git仓库

git clone https://github.com/googlecodelabs/tensorflow-for-poets-2cd tensorflow-for-poets-2

训练数据集

将前面通过视频生成的图片集放到tf_files目录下,每一类图片单独建一个文件夹,文件夹可以如下所示:

milk_photos|----yili|      |--001.png|      |--002.png|      ...||----arla|      |--001.png|      |--002.png|      ...

再训练模型

export IMAGE_SIZE=224
export ARCHITECTURE="mobilenet_0.50_${IMAGE_SIZE}"python -m scripts.retrain \--bottleneck_dir=tf_files/bottlenecks \
  --how_many_training_steps=500 \
  --model_dir=tf_files/models/ \
  --summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}" \
  --output_graph=tf_files/retrained_graph.pb \
  --output_labels=tf_files/retrained_labels.txt \
  --architecture="${ARCHITECTURE}" \
  --image_dir=tf_files/milk_photos

再训练脚本将生成以下两个文件:

  • tf_files/retrained_graph.pb,再训练的图文件。
  • tf_files/retrained_labels.txt,这是一个包含标签的文本文件。

使用再训练的模型

python -m scripts.label_image \--graph=tf_files/retrained_graph.pb  \
    --image=tf_files/milk_photos/yili/008.jpg

结果:

yili (score=0.99988)
arla (score=0.00012)

我们也可以再拍一张照片,试试效果。

至此,训练我们自己的分类器的任务就结束了,在下一篇文章中,我将带领大家探索如何在Android手机上使用我们的图片分类器。

注:本文主要参考了google codelab的教程:TensorFlow For Poets,这个题目还真不好翻译,TensorFlow之歌?原文的步骤更加详细,有兴趣可以参看原文。使用录制视频的方式生成数据集学的是这个视频: https://youtu.be/EnFyneRScQ8?t=4m17s

使用Tensorflow构建属于自己的图片分类器相关推荐

  1. python图片分类器_使用 Tensorflow 构建属于自己的图片分类器

    近几年火热的AI领域吸引了众多有志之士加入,在一段时间的学习之后,不知道你是否有一个疑惑:我能够用AI来做点什么呢? 就拿AI最常见的应用而言,人脸识别已经相当成熟,由巨头把持,围棋AI也有好几个开源 ...

  2. python 图片自动分类机_用tensorflow神经网络实现一个简易的图片分类器

    文章写的不清晰请大家原谅QAQ 这篇文章我们将用 CIFAR-10数据集做一个很简易的图片分类器. 在 CIFAR-10数据集包含了60,000张图片.在此数据集中,有10个不同的类别,每个类别中有6 ...

  3. 使用Tensorflow构建和训练自己的CNN来做简单的验证码识别

    Tensorflow是目前最流行的深度学习框架,我们可以用它来搭建自己的卷积神经网络并训练自己的分类器,本文介绍怎样使用Tensorflow构建自己的CNN,怎样训练用于简单的验证码识别的分类器.本文 ...

  4. 快速入门PyTorch(3)--训练一个图片分类器和多 GPUs 训练

    2019 第 44 篇,总第 68 篇文章 本文大约14000字,建议收藏阅读 快速入门 PyTorch 教程前两篇文章: 快速入门Pytorch(1)--安装.张量以及梯度 快速入门PyTorch( ...

  5. 使用tensorflow构建简单卷积神经网络

    一 概要 CIFAR-10分类问题是机器学习领域的一个通用基准,其问题是将32X32像素的RGB图像分类成10种类别:飞机,手机,鸟,猫,鹿,狗,青蛙,马,船和卡车.  更多信息请移步CIFAR-10 ...

  6. TF之CNN:Tensorflow构建卷积神经网络CNN的简介、使用方法、应用之详细攻略

    TF之CNN:Tensorflow构建卷积神经网络CNN的简介.使用方法.应用之详细攻略 目录 TensorFlow 中的卷积有关函数入门 1.tf.nn.conv2d函数 案例应用 1.TF之CNN ...

  7. 8.1 mnist_soft,TensorFlow构建回归模型

    背景 之前已经写了很多TensorFlow的基本知识,现在利用TensorFlow实现一些简单的功能,对原来的知识进行串联,并初步入门,该部分共包括三篇,分别实现的是回归模型,浅层神经网络,KNN. ...

  8. 使用Keras和TensorFlow构建深度自动编码器

    In this tutorial, we will explore how to build and train deep autoencoders using Keras and Tensorflo ...

  9. 如何使用TensorFlow构建简单的图像识别系统(第2部分)

    by Wolfgang Beyer 沃尔夫冈·拜尔(Wolfgang Beyer) 如何使用TensorFlow构建简单的图像识别系统(第2部分) (How to Build a Simple Ima ...

最新文章

  1. 【c语言】求最大最小值
  2. axure怎样24位bmp输出_平衡(非平衡)输入输出的无源变压器前级放大器
  3. Linux 操作系统原理 — 内核态与用户态
  4. 分割BiSeNet笔记
  5. python使用符号#表示单行注释-Python中注释(多行注释和单行注释)的用法实例...
  6. c#中结构体和类的比较
  7. 1106: 回文数(函数专题)
  8. 【LeetCode笔记】494. 目标和(Java、动态规划、背包问题、滚动数组)
  9. plsql tables 没有表_技术分享 | 在磁盘上查找 MySQL 表的大小
  10. matlab语音去除白噪声_matlab去除高斯白噪声
  11. 大一高数下册笔记整理_高等数学下册知识点总结.doc
  12. 基于Kears的Reuters新闻分类
  13. 【统计学】三大相关系数之肯德尔相关系数(kendall correlation coefficient)
  14. win7无法连接虚拟磁盘服务器,win7系统电脑打开磁盘管理出现“无法连接虚拟磁盘服务”的解决方法...
  15. 在键盘上输入两个int型数据,比较其大小,并输出其中较小的数
  16. 类加载(基本说明、流程图、类加载各个阶段完成的任务)
  17. 钉钉勋章在哪看?钉钉勋章查看方法
  18. 遇到The import org.apache.commons cannot be resolved 的报错
  19. Java IO框架之BIO、NIO、AIO
  20. 【jQuery】实现跑马灯

热门文章

  1. 会计跨考计算机考研,考研最累的10大专业,会计排第几?
  2. JAVA怎么替换html标签呢???
  3. DCDC电源模块温度范围与降额使用
  4. [转]当当网高可用架构之道--转
  5. 珠海:處在二次且全角落升值發展的城市
  6. 长安大学水利计算机专业等级,2016年长安大学计算机类(含计算机科学与技术、软件工程、网络工程等4个专业)专业最低分是多少?...
  7. tsmc18rf工艺库安装教程
  8. c语言字母中取模是什么意思,c语言如何取模运算
  9. Shell脚本curl发起http请求并保存到文件/追加到已有文件
  10. Yii2实现文件zip打包下载功能