本书“机器学习和TensorFlow”

图片 熟悉机器学习和TensorFlow库与驾驶学校的第一堂课相似,当您遇到平行停车的情况时,请尝试在适当的时间换挡并且不要混淆后视镜,疯狂地记住动作的顺序,而脚却紧张地在油门踏板上颤抖。 这是一个困难但必要的练习。 因此在机器学习中:在股票市场上使用现代人脸识别系统或预测算法之前,您将必须使用适当的工具和一组说明才能创建自己的系统而不会出现问题。

机器学习初学者将欣赏本书的应用方向,因为它的目的是介绍基础知识,然后迅速着手解决实际问题。 通过回顾机器学习的概念和使用TensorFlow的原理,您将继续学习基本算法,研究神经网络并能够独立解决分类,聚类,回归和预测的问题。

摘录。 卷积神经网络


辛苦的一天过后在商店购物是一项非常繁重的任务。 我的眼睛受到太多信息的攻击。 销售,优惠券,各种颜色,小孩,闪烁的灯光和到处都是人的通道-这些只是发送到大脑视觉皮层的所有信号的几个示例,无论我是否要关注它。 视觉系统吸收了大量信息。

您肯定知道这句话:“看一次比听一百次更好”。 这可能对您和我(即对人)都是正确的,但是机器可以在图像中找到含义吗? 我们的视觉感光器选择光的波长,但是这些信息显然不会扩展到我们的意识中。 最后,我无法确切地说出我正在观察的光的波长。 以相同的方式,相机接收图像像素。 但是,我们希望获得更高级别的东西,例如对象的名称或位置。 我们如何从像素中获得人眼可感知的信息?

为了从源数据中获得一定的含义,有必要设计一个神经网络模型。 在前面的章节中,介绍了几种类型的神经网络模型,例如完全连接模型(第8章)和自动编码器(第7章)。 在本章中,我们将介绍另一种称为卷积神经网络(CNN)的模型。 该模型适用于图像和其他感觉数据,例如声音。 例如,CNN模型可以可靠地分类哪个对象显示在图像中。

将在本章中讨论的CNN模型将经过训练,将图像分类为10种可能的类别之一。 在这种情况下,“一张图片胜过一个单词”,因为我们只有10种可能的选择。 这是迈向人类感知的微小一步,但我们必须从某些方面入手,对吗?

9.1。 神经网络的缺点


机器学习是模型开发的永恒努力,该模型将具有足够的表现力来表示数据,但同时又不那么普遍,以至于无法重新训练和记忆模式。 神经网络是增加表达能力的一种方法。 但是,正如您可能猜到的那样,他们遭受了重新培训的巨大困扰。

注意当训练模型在训练数据集上异常准确而在验证数据集上差时,就会发生重新训练。 对于少量可用数据,此模型可能过于通用,最后它只记住训练数据。

为了比较这两种机器学习模型的通用性,您可以使用快速粗略的启发式算法来计算训练后需要确定的参数数量。 如图所示。 9.1中,一个完全连接的神经网络将获取256×256图像并将其映射到10个神经元层上,将具有256×256×10 = 655,360个参数! 将其与仅包含五个参数的模型进行比较。 可以假设,与五参数模型相比,完全连接的神经网络可以提供更复杂的数据。

图片

下一部分将讨论卷积神经网络,这是减少参数数量的一种合理方法。 CNN不会处理完全连接的网络,而是会重复使用相同的参数。

9.2。 卷积神经网络


卷积神经网络的主要思想是对图像的局部理解就足够了。 卷积神经网络的实际优势在于,具有多个参数,可以显着减少训练时间以及训练模型所需的数据量。

代替从每个像素获得权重的完全连接网络,CNN拥有查看图像小片段所需的足够数量的权重。 就像用放大镜看书一样:最后,您阅读了整个页面,但是在任何给定时间,只看一小部分。

想象一下一个256×256的图像,而不是使用一次处理整个图像的TensorFlow代码,您可以逐段扫描图像,例如5×5窗口。5×5窗口在图像上滑动(通常从左到右,从上到下),如下所示:如图所示。 9.2。 它以多快的速度滑动称为步幅。 例如,步长为2表示5×5滑动窗口一次移动2个像素,直到整个图像通过。 如即将显示的那样,在TensorFlow中,您可以使用内置函数库来调整步长和窗口大小。

图片

该5×5窗口具有与之关联的5×5权重矩阵。

定义卷积是当窗口穿过整个图像时图像中像素强度值的加权总和。 事实证明,将图像与权重矩阵卷积的过程会创建另一个图像(大小相同,取决​​于折叠)。 凝结是应用卷积的过程。

滑动窗口的所有操作都发生在神经网络的卷积层中。 典型的卷积神经网络具有多个卷积层。 每个卷积层通常会创建许多其他卷积,因此权重矩阵是5×5×n张量,其中n是卷积数。

例如,让图像通过权重矩阵为5×5×64的卷积层,这将创建具有5×5滑动窗口的64个卷积,因此,对应的模型具有5×5×64 = 1600个参数,这大大少于完全连接网络的参数数量:256×256 = 65,536。

卷积神经网络(CNN)的吸引力在于,模型使用的参数数量不取决于原始图像的大小。 您可以在300×300的图像上运行相同的卷积神经网络,而卷积层中的参数数量将保持不变!

9.3。 影像准备


在将TensorFlow与CNN模型一起使用之前,请准备一些图像。 本节中的清单将帮助您为本章的其余部分建立训练数据集。

首先,从www.cs.toronto.edu/~kriz/cifar-10- python.tar.gz下载CIFAR-10 数据集 。 这组包含60,000张图像,这些图像均匀地分布在10个类别中,这对于分类任务来说是一个相当大的资源。 然后,应将映像文件放置在工作目录中。 在图。 图9.3显示了该数据集中的图像示例。

我们已经在上一章关于自动编码器的数据中使用了CIFAR-10数据集,现在再来看一下这段代码。 以下清单直接取自位于www.cs.toronto.edu/~kriz/cifar.html的CIFAR-10文档。 将代码放在cifar_tools.py文件中。

图片

代码清单9.1 在Python中从CIFAR-10文件加载图像

import pickle def unpickle(file): fo = open(file, 'rb') dict = pickle.load(fo, encoding='latin1') fo.close() return dict 

神经网络易于重新训练,因此尽一切可能使此错误最小化很重要。 为此,请不要忘记在处理数据之前清理数据。

数据清理是机器学习管道的主要过程。 清单9.2中的代码使用以下三个步骤来清洁图像集:

1.如果您有彩色图像,请尝试将其转换为灰色阴影以减小输入数据的维数,从而减少参数数量。

2.考虑裁切图像的中心位置,因为图像的边缘没有提供任何有用的信息。

3.通过减去平均值并除以每个数据样本的标准偏差来归一化输入,以使梯度在反向传播期间不会发生太大的变化。

以下清单显示了如何使用这些方法清除数据集。

图片

保存CIFAR-10数据集中的所有图像,然后运行清除功能。 以下清单定义了一种方便的方法,用于读取,清理和结构化TensorFlow中使用的数据。 在那里,您应该包括cifar_tools.py文件中的代码。

清单9.3。 预处理所有CIFAR-10文件

 def read_data(directory): names = unpickle('{}/batches.meta'.format(directory))['label_names'] print('names', names) data, labels = [], [] for i in range(1, 6): filename = '{}/data_batch_{}'.format(directory, i) batch_data = unpickle(filename) if len(data) > 0: data = np.vstack((data, batch_data['data'])) labels = np.hstack((labels, batch_data['labels'])) else: data = batch_data['data'] labels = batch_data['labels'] print(np.shape(data), np.shape(labels)) data = clean(data) data = data.astype(np.float32) return names, data, labels 

在using_cifar.py文件中,您可以为此导入cifar_tools来使用该方法。 清单9.4和9.5展示了如何从数据集中获取多个图像并将其可视化。

清单9.4。 使用cifar_tools辅助函数

 import cifar_tools names, data, labels = \ cifar_tools.read_data('your/location/to/cifar-10-batches-py') 

您可以任意选择多个图像并根据标签绘制它们。 下面的清单就是这样做的,因此您可以更好地了解将要处理的数据类型。

图片

通过运行此代码,您将创建cifar_examples.png文件,其外观类似于图。 9.3。

»有关这本书的更多信息,请访问出版商的网站
» 目录
» 摘录

小贩优惠券20%折扣- 机器学习

Source: https://habr.com/ru/post/zh-CN437964/


All Articles