前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用TensorFlow实现神经网络的介绍

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

作者头像
首席架构师智库
发布2018-04-09 16:24:01
8220
发布2018-04-09 16:24:01
举报

介绍

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

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

在本文中,我将向您介绍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”视频
  • 专门的资源列表
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 首席架构师智库 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 目录
  • 何时应用神经网络?
  • 一般解决神经网络问题的方法
  • 了解图像数据和流行库来解决它
  • 什么是TensorFlow?
  • TensorFlow的典型“流”
  • 在TensorFlow中实现神经网络
  • TensorFlow的限制
  • TensorFlow与其他库
  • 到哪里去
  • 有用的资源
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档