机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(一)| 干货

简介:

机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(一)| 干货

如果你觉得这是一篇简单介绍人工智能、机器学习和深度学习的文章,那就错啦。你可以在网上搜罗到一大堆相关话题的文章,而这篇文章也并不是讨论人工智能是否会奴役人类或抢走人们饭碗之类的话题,毕竟相关的各种推论和谣言已经满天飞了。

这只是一篇详细描述如何开始搭建一个机器学习系统,并让它可以识别所看到图像的文章。

作者Wolfgang Beyer目前现在正在学习人工智能和机器学习的内容。他认为最好的学习方式不是仅仅阅读各类材料,而是要真正地去动手搭建一个系统。这就是雷锋网翻译本文的目的,也是作者要向你介绍的。在这篇文章中Beyer将向你展示如何搭建一个系统,去完成一项简单的计算机视觉任务:识别图像内容。

Beyer强调,他并不是一个专家。“我正在学习,而且还有很多东西需要学习。我只是简单介绍我正在做的事情。如果这对你能有所帮助,或者你也觉得很有趣,就已经很好了。如果你发现了错误或有什么改进建议也请告诉我,你的回复对我也很重要。”

阅读本文前你并不需要具备机器学习的相关经验。示例代码是使用Python写的,如果你有Python的基础知识是最好的。但如果你只是掌握其他的编程语言,那也已经足够了。由于篇幅限制,本系列将分四篇文章发布,雷锋网编译,未经许可不得转载。

为什么让机器学会图像识别?

图像识别是开发和测试机器学习的一项重要任务,因为视觉可能是最重要的一项感知能力。虽然对于人类来说,它是与生俱来的。但它是怎么实现的?大脑是怎样将视网膜上的图像转化成我们对周围环境的心智模式的?我想没人能对此一清二楚。关键是,对我们来说这看起来如此简单——我们不需要有意识地去做这件事,而对于计算机来说却困难重重(事实上,对我们来说也并不是看上去那么简单。只是我们并没有意识到进行了多少工作。有超过一半的大脑区域直接或间接参与了视觉活动)。

在我们甚至都不知道自己怎么看到东西的情况下,怎么让计算机去做到这样的事情呢?这就是机器学习要研究的事情。我们采取的方法是让计算机自己去完成这样的过程,而不是手把手地一步步教会计算机如何解释图像并翻译成计算机程序。我们给计算机提供总体结构,让计算机从经验中学习,就像我们人类做的那样。

但是,在我们开始构想计算机视觉的整体方案之前,让我们把这个任务简化为一个容易掌握的小目标。

图像分类和CIFAR-10数据集

我们尝试解决一个尽可能小而简单的问题,另外也不要期望它能瞬间让我们成为机器学习大师。我们希望计算机能做的包括以下方面:当我们向计算机展示一幅图片(特定尺寸)时,它能够对图片进行分析并打上标签。他可以从固定数量的标签中进行选择,每一类的标签描述了一种图像的内容。我们的目标就是这个模型能够尽可能地挑选出正确的标签。这个任务被称作图像分类。

我们将使用标准的CIFAR-10数据集。CIFAR-10包含了60000幅图片。它有10个不同的分类,每类包含6000幅图片。每幅图片的规格是32x32像素。这么小尺寸的图片对我们人类来说有时很难进行正确的分类,但它却简化了计算机模型的任务,并降低了分析图片的计算负载。


机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(一)| 干货

CIFAR-10数据集中10个分类中的随机图片。由于分辨率低,人类很难进行正确的标签。

我们将图片转化为一连串的数字输送给计算模型。每个像素由代表红色,绿色和蓝色的三个浮点数来表示。其结果就是32x32x3=3072个值。

除了CIFAR-10,还有很多其他的图像数据集可以用于计算机视觉的研究。之所以使用标准数据集,有两个目的:

第一,要收集这么多的图片是一项巨大的工作。你需要有大量的图片资源,并根据需要对他们进行分别标签。

第二,使用相同的数据集,可以让我们有目的地比较不同方法的优劣。

另外,使用标准数据集,可以相互比较,在竞赛中排出名次。最有名的比赛是Image-Net图像识别大赛,它需要对1000个不同的种类进行识别。2012年的胜者是来自多伦多大学(University of Toronto)的亚力克斯•克利则夫斯基(Alex Krizhevsky),伊利亚·苏特斯科娃(Ilya Sutskever)和杰夫·辛顿(Geoffrey Hinton)设计的算法(雷锋网注:可点击论文链接查看)。这个系统领跑整个比赛并且以巨大的优势获胜。

这次比赛对整个研究领域产生了巨大的冲击,因为这是第一次使用卷积神经网络的方法获得胜利。卷积神经网络是一种人工神经网络,它大致模拟了动物视觉的皮质行为。这一技术的应用已经有一段时间,但它的潜力还没被多数人认识到。2012 Image-Net竞赛后,这种情况出现了改变。人们突然对神经网络和深度学习(深度学习是使用多层神经网络的方法解决机器学习的问题)产生了巨大兴趣,而这次赛事也极大地推动了以后几年深度学习的快速发展。

监督学习

我们怎么使用图像数据集让计算机自己学习呢?即使计算机自己能够学习,我们也需要告诉它学习什么和怎样学习。所以,我们需要通过制定一个大致的流程让计算机能够对图像进行评估。

我们定义一个通用的数学模型,将输入图像转换为输出标签。这个模型的实际输出不仅仅依赖于图像本身,还依赖模型内建的参数。这些参数并不是由我们提供,而是由计算机通过学习获得。

这样一来,这个过程可以被理解为一个优化问题。我们初始定义一个模型并提供初始的参数值。然后再向模型输入图像数据集和已知的正确标签。这就是训练的过程。在这个阶段模型重复校验,训练数据,持续调整参数值。目标是找到合适的参数使模型输出尽可能多的正确结果。这种同时使用输入数据和正确结果的训练方法叫做监督学习。还有一种叫做非监督学习,这种学习中只使用了输入数据而没有标签,但在这篇文章中我们不做讨论。

当训练完成,模型参数被固定下来,并可以被用于图像集以外的图像分类。

机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(一)| 干货

在训练期间,模型的预测结果与真实值进行比较。这些信息被用于更新参数值。在测试过程中就不再有反馈,模型只是产生标签。

TensorFlow

TensorFlow是机器学习的开源软件库,它由Google在2015年发布并很快成为全世界的研究者和学习者中最流行的机器学习库之一。它在图像分类模型中承担重要作用。

接下来,我们就要开始学习如何用TensorFlow搭建一个合适的模型。

建立模型,一个Softmax分类器

Github支持这个模型的完整代码。在使用之前,你需要安装以下软件:

· Python(代码经过了Python2.7测试,Python3.3+也应该可以工作,安装链接)

·  TensorFlow(安装指导链接)

·  CIFAR-10数据集:下载Python版本的数据集

 从https://www.cs.toronto.edu/~kriz/cifar.html下载或者使用链接中的压缩文档。请把 cifar-10-batches-py解压到python源代码的目录下,这样图像的路径应该为/path-to-your-python-source-code-files/cifar-10-batches-py/。

 好了,现在我们可以开始了。让我们先来看看试验的主文件softmax.py,一行一行地来分析:

from __future__ import absolute_import

from __future__ import division

from __future__ import print_function


import numpy as np

import tensorflow as tf

import time

import data_helpers

根据TensorFlow代码规范,在所有TensorFlow Python文件中为了Python2和3的兼容性,都应该添加future语句。然后导入TensorFlow,numpy用于数值计算和时间模块。data_helper.py包括加载和准备数据集的函数。

beginTime = time.time()

 # Parameter definitions


batch_size = 100

learning_rate = 0.005

max_steps = 1000

 

# Prepare data

data_sets = data_helpers.load_data()

我们启动一个计时器测量运行时间和定义一些参数。稍后在实际使用它们时再进行讨论。然后加载CIFAR-10数据集。因为读取数据并不是我们要做的核心,我把这部分的函数单独放在data_helper.py文件中。它只是负责读取包含数据集的文件,并把数据放入一个方便我们操作的数据结构中。

需要提到的重要的一点是,load_data()是将60000幅图像分为两部分。大的一部分包含50000幅图像。这些数据集用于训练我们的模型。另外的10000幅图像被称作测试集。在训练结束之前,我们的模型将不会看到这些图像。直到模型中的参数不再变换,我们使用测试集作为模型输入来检验模型的性能。

将数据分为训练集和测试集非常重要。我们并不知道我们的模型在遇到训练数据集或测试数据集的时候是否有相同的表现。最糟的情况在于,模型记录下了它看过的所有图像。如果我们使用相同的训练集进行测试,模型通过查找存储下来的正确答案,可能表现得非常完美。但是如果使用它从未见过的图像则原形毕露。这在模型学习中有个专门的概念叫做过度拟合,就是说特定的训练数据可能掩盖一些更为通常的特征。在机器学习中避免过度拟合是一项重大的课题。关于过度拟合和为什么建议将数据分成2个或者3个数据集,可以参考Coursera上吴恩达(Andrew Ng)机器学习课程的节选视频

回到我们的代码,load_data()返回一个dictionary类型数据:

  • images_train:训练集转换为50000x3072(32像素x32像素x3个颜色通道)的数组

  • labels_train:训练集的50000个标签(每个数字从0到9代表图像训练集的10个分类)

  • images_test:测试集(10000x3072)

  • labels_test:测试集的10000个标签

  • classes:10个文本标签,将数字转换成文字(0代表“飞机”,1代表“车”,等等)

# Define input placeholders

images_placeholder = tf.placeholder(tf.float32, shape=[None, 3072])

labels_placeholder = tf.placeholder(tf.int64, shape=[None])

本文作者:晟炜

本文转自雷锋网禁止二次转载,原文链接

相关实践学习
基于函数计算实现AI推理
本场景基于函数计算建立一个TensorFlow Serverless AI推理平台。
相关文章
|
1天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【5月更文挑战第2天】 随着人工智能技术的飞速发展,深度学习已经成为推动多个科技领域进步的关键力量。特别是在图像识别技术方面,深度学习的应用已经极大地改善了算法的准确性和效率。本文将探讨深度学习在图像识别中的核心机制,并重点分析其在自动驾驶系统中的具体应用,包括车辆检测、行人识别以及交通标志识别等关键技术点。通过综合现有研究成果与最新技术动态,本文旨在为读者提供一个关于如何利用深度学习提升自动驾驶系统性能的全面视角。
|
1天前
|
机器学习/深度学习 自动驾驶 算法
基于深度学习的图像识别在自动驾驶系统中的应用
【5月更文挑战第2天】 随着人工智能技术的飞速发展,深度学习在图像识别领域取得了突破性进展。这些技术的应用不仅局限于日常的智能设备中,更在自动驾驶系统的发展中扮演着关键角色。本文旨在探讨深度学习算法如何提升自动驾驶汽车的图像识别能力,以及这一进步如何促进自动驾驶系统的整体性能和安全性。通过分析最新的研究成果和实际案例,我们阐述了深度学习模型在处理复杂交通场景中的优势,并讨论了未来可能的发展趋势。
|
2天前
|
机器学习/深度学习 算法 自动驾驶
探索机器学习在图像识别中的应用
【5月更文挑战第1天】 随着人工智能技术的飞速发展,机器学习已成为其最活跃的分支之一。特别是在图像识别领域,机器学习技术已展现出强大的能力与广泛的应用前景。本文将深入探讨机器学习在图像识别中的关键作用,从基础原理到实际应用案例,剖析其背后的算法和模型。同时,我们将讨论当前面临的挑战和未来的发展趋势,为读者提供一个全景式的技术分享。
8 3
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在图像识别中的应用与挑战探索机器学习中的自然语言处理技术
【4月更文挑战第30天】 随着人工智能技术的飞速发展,深度学习已经成为计算机视觉领域的核心动力。本文将探讨深度学习在图像识别任务中的关键技术、应用实例以及面临的主要挑战。我们将重点讨论卷积神经网络(CNN)的架构优化、数据增强技术以及迁移学习的策略,并通过具体案例分析其在医疗影像、自动驾驶和面部识别等领域的应用成效。同时,我们也将指出当前模型泛化能力不足、对抗性攻击以及算力资源需求等挑战,并提出潜在的解决方向。 【4月更文挑战第30天】 在人工智能领域,自然语言处理(NLP)是赋予机器理解和响应人类语言能力的关键技术。本文将深入探讨NLP的发展历程、核心技术及其在不同领域的应用案例。我们将从
|
3天前
|
机器学习/深度学习 自动驾驶 安全
基于深度学习的图像识别技术在自动驾驶系统中的应用网络安全与信息安全:防御前线的关键技术与意识
【4月更文挑战第30天】随着人工智能技术的飞速发展,深度学习已成为推动多个技术领域革新的核心力量。特别是在图像识别领域,深度学习模型已展现出超越传统算法的性能。在自动驾驶系统中,准确的图像识别是确保行车安全和高效导航的基础。本文将探讨深度学习在自动驾驶中图像识别的应用,分析关键技术挑战,并提出未来的发展方向。
|
3天前
|
机器学习/深度学习 自动驾驶 安全
深入理解操作系统内存管理:策略与实现基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第30天】 在现代计算机系统中,操作系统的内存管理是确保系统高效、稳定运行的关键组成部分。本文将深入探讨操作系统中内存管理的多种策略及其实现机制,包括但不限于分页、分段和段页式结合等技术。我们将剖析内存分配的原理,讨论虚拟内存技术的实现以及它如何提供更大的地址空间并允许内存的交换。同时,我们还会涉及内存保护机制,它们是如何防止程序访问未授权的内存区域。最后,文中将对现代操作系统如Linux和Windows中的内存管理实践进行比较分析,以期给读者提供全面而深入的理解和参考。 【4月更文挑战第30天】 随着人工智能技术的飞速发展,深度学习已经
|
3天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第30天】 随着人工智能技术的飞速发展,深度学习已成为推动技术创新的核心动力之一。特别是在图像识别领域,深度学习技术已经取得了显著的成就。本文旨在探讨基于深度学习的图像识别技术在自动驾驶系统中的应用,并分析了该技术对提升自动驾驶汽车环境感知能力的重要性。通过构建高效准确的深度神经网络模型,实现对道路场景中各种物体的快速识别与分类,从而为自动驾驶决策提供可靠的数据支持。
|
3天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第30天】 随着人工智能技术的不断进步,深度学习在图像处理与分析方面取得了革命性的突破。尤其是在自动驾驶领域,基于深度学习的图像识别技术已经成为实现车辆环境感知的关键。本文将探讨深度学习模型如何改善自动驾驶系统中的图像识别任务,包括物体检测、分类及追踪,并分析这些技术对提高自动驾驶汽车安全性和可靠性的影响。我们还将讨论目前面临的挑战以及未来的发展趋势。
|
3天前
|
机器学习/深度学习 数据采集 安全
基于机器学习的网络安全威胁检测系统
【4月更文挑战第30天】 随着网络技术的迅猛发展,网络安全问题日益凸显。传统的安全防御机制在应对复杂多变的网络攻击时显得力不从心。为了提高威胁检测的准确性和效率,本文提出了一种基于机器学习的网络安全威胁检测系统。该系统通过集成多种数据预处理技术和特征选择方法,结合先进的机器学习算法,能够实时识别并响应各类网络威胁。实验结果表明,与传统方法相比,本系统在检测率、误报率以及处理速度上均有显著提升,为网络安全管理提供了一种新的技术手段。
|
3天前
|
机器学习/深度学习 数据采集 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第30天】 本文深入探讨了深度学习技术在自动驾驾驶车辆图像识别系统中的应用,重点分析了卷积神经网络(CNN)的结构优化、训练策略和在实际场景中的部署问题。通过对比不同深度学习模型的性能表现,揭示了数据处理、模型泛化能力和实时性要求之间的平衡机制。文章不仅总结了现有技术的局限性,还提出了未来研究的方向,旨在为自动驾驶领域的技术进步提供理论支持和实践指南。