使用TensorFlow实现神经网络的介绍

介绍

如果您一直在追踪数据科学/机器学习,您将不会错过深度学习和神经网络周围的动态。组织正在寻找具有深度学习技能的人,无论他们在哪里。从竞争开始到开放采购项目和大额奖金,人们正在尝试一切可能的事情来利用这个有限的人才。自主驾驶的工程师正在被汽车行业的大型枪支所猎杀,因为该行业处于近几十年来面临的最大破坏的边缘!

如果您对深度学习所提供的潜在客户感到兴奋,但还没有开始您的旅程 - 我在这里启用它。从这篇文章开始,我将撰写一系列深入学习的文章,涵盖深受欢迎的深度学习图书馆及其实践实践。

在本文中,我将向您介绍TensorFlow。阅读本文后,您将能够了解神经网络的应用,并使用TensorFlow来解决现实生活中的问题。本文将要求您了解神经网络的基础知识,并熟悉编程。虽然这篇文章中的代码在python中,但我已经将重点放在了概念上,并且尽可能地保持与语言无关。

让我们开始吧!

TensorFlow

目录

  • 何时应用神经网?
  • 一般解决神经网络问题的方法
  • 了解图像数据和流行图书馆来解决它
  • 什么是TensorFlow?
  • TensorFlow的典型“流”
  • 在TensorFlow中实施MLP
  • TensorFlow的限制
  • TensorFlow与其他库
  • 从哪里去?

何时应用神经网络?

现在,神经网络已经成为焦点。有关神经网络和深度学习的更详细的解释,请阅读这里。其“更深层次”的版本在图像识别,语音和自然语言处理等诸多领域取得了巨大的突破。

出现的主要问题是什么时候和何时不应用神经网络?这个领域现在就像一个金矿,每天都有很多发现。而要成为这个“淘金热”的一部分,你必须注意几点:

首先,神经网络需要清晰和翔实的数据(主要是大数据)进行训练。尝试想象神经网络作为一个孩子。它首先观察父母的行为。然后,它试图自己行走,并且每一步,孩子学习如何执行一个特定的任务。它可能会下降几次,但经过几次不成功的尝试,它会学习如何走路。如果你不让它走路,它可能不会学习如何走路。您可以向孩子提供的曝光次数越多越好。

对于像图像处理这样的复杂问题,使用神经网络是谨慎的。神经网络属于称为表示学习算法的一类算法。这些算法将复杂问题分解成更简单的形式,使其变得可理解(或“可表示”)。想想它在你吞咽之前咀嚼食物。对于传统(非表示学习)算法,这将更加困难。

当您有适当类型的神经网络来解决问题。每个问题都有自己的扭曲。所以数据决定了你解决问题的方式。例如,如果问题是序列生成,则循环神经网络更适合。而如果是图像相关的问题,那么你可能会更好地采用卷积神经网络进行改变。

最后但并非最不重要的是,硬件要求对于运行深层神经网络模型至关重要。神经网络很久以前就被“发现”了,但近年来,由于计算资源越来越强大,主要原因在于神经网络。如果你想解决这些网络的现实生活中的问题,准备购买一些高端的硬件!

一般解决神经网络问题的方法

神经网络是一种特殊类型的机器学习(ML)算法。因此,作为每个ML算法,它遵循数据预处理,模型构建和模型评估的通常的ML工作流程。为了简洁起见,我列出了如何处理神经网络问题的DO DO列表。

检查是否是神经网络给您提升传统算法的问题(参见上一节中的清单)

做一个关于哪个神经网络架构最适合所需问题的调查

定义您选择的任何语言/图书馆的神经网络架构。

将数据转换为正确的格式,并将其分批

根据您的需要预处理数据

增加数据以增加尺寸并制作更好的训练模型

饲料批次到神经网络

训练和监测培训和验证数据集中的变化

测试您的模型,并保存以备将来使用

对于这篇文章,我将专注于图像数据。所以让我们明白,首先我们深入了解TensorFlow。

了解图像数据和流行库来解决它

图像大部分排列为3-D阵列,其尺寸为高度,宽度和颜色通道。例如,如果您在此时拍摄个人电脑的屏幕截图,那么首先将其转换为3-D数组,然后压缩它的“.jpeg”或“.png”文件格式。

虽然这些图像对于人来说很容易理解,但计算机很难理解它们。这种现象被称为“语义差距”。我们的大脑可以在几秒钟内观看图像并了解完整的图像。另一方面,计算机将图像视为数字数组。那么问题是我们如何将这个图像解释给机器?

在早期的时候,人们试图将这个图像分解为“可理解”的格式,像“模板”一样。例如,脸部总是具有特定的结构,每个人都有一些保护,例如眼睛,鼻子或脸部的形状。但是这种方法将是乏味的,因为当要识别的对象的数量会增加时,“模板”将不成立。

快速到2012年,深层神经网络架构赢得了ImageNet的挑战,这是一个从自然场景识别物体的巨大挑战。它继续在所有即将到来的ImageNet挑战中统治其主权,从而证明了解决图像问题的有用性。

那么人们通常使用哪些图书馆/语言来解决图像识别问题?最近的一项调查显示,大多数流行的深层学习库都有Python接口,其次是Lua,Java和Matlab。最受欢迎的图书馆,仅举几例:

  • Caffe
  • DeepLearning4j
  • TensorFlow
  • Theano
  • Torch

现在,您了解图像的存储方式以及使用的常用库,我们来看看TensorFlow提供的功能。

什么是TensorFlow?

让我们从官方的定义开始,

“TensorFlow是一个使用数据流图进行数值计算的开源软件库。图中的节点表示数学运算,而图形边缘表示在它们之间传递的多维数据阵列(又称张量)。灵活的架构允许您将计算部署到具有单个API的桌面,服务器或移动设备中的一个或多个CPU或GPU。

如果这听起来有点可怕 - 别担心。这是我简单的定义 - 看看TensorFlow只是一个麻烦的扭曲。如果你以前一直在努力,理解TensorFlow将是一块蛋糕! numpy和TensorFlow之间的一个主要区别在于TensorFlow遵循一个懒惰的编程范例。它首先构建要完成的所有操作的图形,然后当调用“会话”时,它会“运行”图形。它是通过将内部数据表示更改为张量(也称为多维数组)来实现的。构建计算图可以被认为是TensorFlow的主要成分。要了解更多关于计算图的数学结构,请阅读本文。

将TensorFlow分类为神经网络库很容易,但不仅仅是这样。是的,它被设计成一个强大的神经网络库。但它有权力做得比这更多。您可以在其上构建其他机器学习算法,如决策树或k-最近的邻居。你可以从字面上做一切你通常会做的麻烦!它恰当地称为“类固醇类”

使用TensorFlow的优点是:

  • 它具有直观的结构,因为顾名思义,它具有“张量的流动”。您可以轻松地显示图形的每个部分。
  • 轻松地在cpu / gpu上进行分布式计算
  • 平台灵活性您可以随时随地运行模型,无论是在移动设备,服务器还是PC上。

TensorFlow的典型“流”

每个图书馆都有自己的“实现细节”,即一种写在其编码范例之后的方式。 例如,在实现scikit-learning时,首先创建所需算法的对象,然后在列车上建立一个模型,并在测试集上得到预测,如下所示:

# define hyperparamters of ML algorithm

正如我刚才所说,TensorFlow遵循一种懒惰的方法。 在TensorFlow中运行程序的通常工作流程如下:

  • 构建计算图,这可以是TensorFlow支持的任何数学运算。
  • 初始化变量,编译前面定义的变量
  • 创建会话,这是魔法开始的地方!
  • 在会话中运行图形,将编译的图形传递给会话,该会话开始执行。
  • 关闭会话,关闭会话。

一些在TensoFlow中使用的术语

  • placeholder: A way to feed data into the graphs
  • feed_dict: A dictionary to pass numeric values to computational graph placeholder: 一种将数据提供给图表的方式 feed_dict:将数值传递到计算图的字典

让我们写一个小程序来添加两个数字!

# import tensorflow

在TensorFlow中实现神经网络

注意:我们可以使用不同的神经网络架构来解决这个问题,但为了简单起见,我们深入实施了前馈多层感知器。

让我们先记住我们对神经网络的了解。

神经网络的典型实现如下:

  • 定义神经网络架构进行编译
  • 将数据传输到您的模型
  • 在引擎盖下,数据首先分为批次,以便可以摄取。批次首先进行预处理,增强,然后进入神经网络进行培训
  • 然后模型逐步训练
  • 显示特定数量的时间步长的准确性
  • 训练后保存模型供日后使用
  • 在新数据上测试模型并检查它的执行情况

在这里我们解决我们深刻的学习实践问题 - 识别数字。我们来看看我们的问题陈述。

我们的问题是图像识别,用于识别给定28×28图像中的数字。我们有一个子集的图像训练和其余的测试我们的模型。首先下载火车和测试文件。数据集包含数据集中所有图像的压缩文件,train.csv和test.csv都具有对应的列车和测试图像的名称。数据集中没有提供任何其他功能,只是原始图像以“.png”格式提供。

如您所知,我们将使用TensorFlow制作神经网络模型。所以你应该首先在系统中安装TensorFlow。根据您的系统规格,请参阅官方安装指南进行安装。

我们将按照上述模板。用python 2.7内核创建Jupyter笔记本,并按照以下步骤操作。

  • 我们导入所有必需的模块
%pylab inline
  • 我们设置种子值,以便我们可以控制我们的模型随机性
# To stop potential randomness
  • 第一步是设置目录路径,保护!
root_dir = os.path.abspath('../..')
  • 现在让我们看看我们的数据集。 这些是.csv格式,并具有一个文件名以及适当的标签
train = pd.read_csv(os.path.join(data_dir, 'Train', 'train.csv'))

filename

label

0

0.png

4

1

1.png

9

2

2.png

1

3

3.png

7

4

4.png

3

让我们看看我们的数据看起来如何! 我们读取我们的图像并显示它。

img_name = rng.choice(train.filename)

上面的图像被表示为numpy数组,如下所示

  • 为了方便数据操作,我们将所有图像存储为数字数组
temp = []

由于这是一个典型的ML问题,为了测试我们模型的正常运行,我们创建一个验证集。 我们采取70:30的分组大小,用于训练集和验证集

split_size = int(train_x.shape[0]*0.7)
  • 现在我们在我们的程序中定义了一些我们以后使用的帮助函数
def dense_to_one_hot(labels_dense, num_classes=10):

现在是主要部分! 让我们来定义我们的神经网络架构。 我们定义一个具有3层的神经网络; 输入,隐藏和输出。 输入和输出中的神经元数量是固定的,因为输入是我们的28×28图像,输出是表示该类的10×1矢量。 我们在隐藏层中采集500个神经元。 这个数字可以根据你的需要而变化。 我们还为其余变量分配值。 阅读关于神经网络基础知识的文章,深入了解它的工作原理。

### set all variables
  • 现在创建我们的神经网络计算图
hidden_layer = tf.add(tf.matmul(x, weights['hidden']), biases['hidden'])
  • 另外,我们需要定义神经网络的成本
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(output_layer, y))
  • 并设置优化器,即我们的反向推算算法。 这里我们使用Adam,它是Gradient Descent算法的有效变体。 在张量流中还有一些其他优化器(请参阅这里)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
  • 在定义了我们的神经网络架构之后,让我们初始化所有的变量
init = tf.initialize_all_variables()
  • 现在让我们创建一个会话,并在会话中运行我们的神经网络。 我们还验证我们的模型在我们创建的验证集上的准确性
with tf.Session() as sess:

这将是上述代码的输出

Epoch: 1 cost = 8.93566
  • 用自己的眼睛来测试我们的模型,让我们来看看它的预测
img_name = rng.choice(test.filename)
Prediction is: 8
  • 我们看到我们的模特表现相当不错! 现在我们来创建一个提交
sample_submission.filename = test.filename

并做了! 我们刚刚创建了自己训练有素的神经网络!

TensorFlow的限制

尽管TensorFlow功能强大,但它仍然是一个低级别的图书馆。例如,它可以被认为是机器级语言。但是,对于大多数目的,您需要模块化和高级接口,如keras

  • 它还在发展,这么多的awesomeness来了!
  • 这取决于你的硬件规格,越多越好
  • 仍然不是许多语言的API。
  • 还有很多事情尚未被包括在TensorFlow中,比如OpenCL支持。

上面提到的大多数都在TensorFlow开发人员的视野中。他们为制定未来图书馆的发展方向制定了路线图。

TensorFlow与其他库

TensorFlow建立在与使用数学计算图的Theano和Torch类似的原理。但是,随着分布式计算的额外支持,TensorFlow可以更好地解决复杂的问题。已经支持部署TensorFlow模型,这使得它更容易用于工业目的,打击了Deeplearning4j,H2O和Turi等商业图书馆。 TensorFlow有Python,C ++和Matlab的API。最近还有一些支持其他语言(如Ruby和R)的激增。因此,TensorFlow正在努力拥有通用语言支持。

到哪里去

所以你看到如何用TensorFlow构建一个简单的神经网络。这段代码是为了让人们了解如何开始实施TensorFlow,所以请拿一些盐。记住,为了解决更复杂的现实生活中的问题,你必须稍微调整一下代码。

可以抽象出许多上述功能,以提供无缝的端到端工作流程。如果您已经使用scikit学习,您可能会知道一个高级别的图书馆如何抽象出“底层”的实现方式,为终端用户提供了一个更简单的界面。虽然TensorFlow的大部分实现都已经被抽象出来了,但高级库正在出现,如TF-slim和TFlearn。

有用的资源

  • TensorFlow官方存储库
  • Rajat Monga(TensorFlow技术主管)“TensorFlow for everyone”视频
  • 专门的资源列表

原文发布于微信公众号 - 智能计算时代(intelligentinterconn)

原文发表时间:2017-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习之旅

python开发:特征工程代码模版(二)

正题开始: 这篇文章是入门级的特征处理的打包解决方案的python实现汇总,如果想get一些新鲜血液的朋友可以叉了,只是方便玩数据的人进行数据特征筛选的代码集...

19830
来自专栏腾讯大数据的专栏

深度神经网络DNN的多GPU数据并行框架 及其在语音识别的应用

深度神经网络(Deep Neural Networks, 简称DNN)是近年来机器学习领域中的研究热点,产生了广泛的应用。DNN具有深层结构、数千万参数需要学...

28670
来自专栏IT派

干货 | 机器学习在web攻击检测中的应用实践

岳良, 携程信息安全部高级安全工程师。2015年加入携程,主要负责渗透测试,安全评审,安全产品设计。 一、背景 在web应用攻击检测的发展历史中,到目前为止...

579110
来自专栏深度学习入门与实践

【深度学习系列】用PaddlePaddle进行人脸识别

上个案例中我们讲了如何用PaddlePaddle进行车牌识别的方法,这次的案例中会讲到如何用PaddlePaddl进行人脸识别,在图像识别领域,人脸识别也属于...

45080
来自专栏月色的自留地

从锅炉工到AI专家(2)

20440
来自专栏深度学习入门与实践

【深度学习系列】PaddlePaddle垃圾邮件处理实战(一)

44240
来自专栏PPV课数据科学社区

R语言与数据分析之二:绘图

? 图形展示是最高效且形象的数据描述手段,因此巧妙的图像展示是高质量数据分析报告的必备内容,因此强大的图形展示功能也是统计分析软件的必备功能。R语言提供了强大...

465150
来自专栏量子位

机器学习玩转Flappy Bird全书:六大“流派”从原理到代码

被Flappy Bird虐过么?反击的号角吹响了 作为一个曾经风靡一时的游戏,《Flappy Bird》曾经虐过很多的人类玩家。 而过去一段时间以来,好多人类借...

49990
来自专栏CreateAMind

深度神经网络惊人的'注意力'能力-附论文解读

8720
来自专栏CVer

重磅 | TensorFlow学习资料最全集锦

TensorFlow 已然成为深度学习框架中的扛把子,各位童鞋即使没有学习过,但一定有所耳闻。本文总结了TensorFlow相关的入门指南、网上教程、视频教程、...

20930

扫码关注云+社区

领取腾讯云代金券