本篇文章4363字,读完约11分钟

根据雷锋网站:史蒂文·杜弗兰,本文作者,总结了初学者学习张量流所需的核心知识点和实践内容,旨在鼓励更多的人通过张量流进入深度学习的殿堂。作为一个基本的入门教程,本教程从对张量流原理的简单介绍开始讲述动手操作,并逐一讲解核心概念,非常适合基础薄弱、无从下手的初学者。雷锋。(公开号码:雷锋。由人工智能研究所编辑。

TensorFlow上手要点都总结在这儿了,你还有理由偷懒吗?

史蒂文·杜弗兰:我在20世纪90年代开始写神经网络软件。自从它是开源的以来,Tensorflow一直渴望用它来构建一些有趣的东西。

谷歌的人工智能系统现在是一个新的热点。当张量流可以安装在草莓馅饼,操作变得非常容易。我很快在上面建立了一个二元神经网络。在这篇文章中,我将与你分享我的经验,并帮助那些想尝试并深刻理解神经网络的人更快地开始。

什么是张量流?引用tensorflow官方网站的话,tensorflow是一个“使用数据流图进行数值计算的开源软件库”。“数据流图”是什么意思?这是一件很酷的事情。在给出正式答案之前,让我们来谈谈一个简单的神经网络的结构。

简单的神经网络由输入单元、隐藏单元、偏置单元和输出单元组成。输入层负责接收数据。隐藏层之所以被称为隐藏层,是因为从用户的角度来看,它们是隐藏的。输出层输出我们获得的结果。下一个阈值用于控制是否输出隐藏层和输出层的值(即,只有超过阈值的神经元才能被输出)。每两个不同神经元之间的联系是权重,只是一些数字,需要通过训练获得。

TensorFlow上手要点都总结在这儿了,你还有理由偷懒吗?

训练神经网络是为了找到最佳的权值,这使得神经网络逐步变得“智能”。在以下示例中,输入神经元的值被设置为二进制数0,0,0。接下来,张量流会做中间的所有事情,输出神经元会神奇地包含数字0,0,1。即使你错过了,它也知道二进制系统中低于000的数字是001,001,然后是010,依此类推,直到111。一旦重量被设定为合适的值,它就会知道如何计数。

TensorFlow上手要点都总结在这儿了,你还有理由偷懒吗?

运行神经网络的一个步骤是将每个权值乘以其对应的输入神经元,然后将乘积结果保存在对应的隐藏神经元中。

我们可以将这些神经元和权重想象成一个数组,在python中也称为列表。从数学角度来看,它们都是矩阵。我们在图中只画了一部分。这里,我们将输入层矩阵和权重矩阵相乘,得到五元素隐藏层矩阵(也称为列表或系列)。

从矩阵到张量在张量流中,这些列表被称为张量。矩阵乘法被称为运算(也称为计算节点或运算),程序员通常称之为运算,在阅读张量流官方文件时经常遇到。此外,神经网络是张量的集合和运算张量的运算,它们共同构成了神经网络的图形。

下面的图片来自于文章“张量板,一个可视化图形的工具”,用于检测训练前后张量值的变化。张量是图中的连接线,上面的数字代表张量的维数。连接张量的节点是各种操作(op),双击后可以看到更多细节。例如,下图显示了双击后第一层(第1层)的详细信息。

最低的x是占位符操作,它为输入张量赋值。沿着左边的线是输入张量。上面的节点用matmul运算标记,matmul运算将输入张量和权重张量的矩阵相乘(mat mul运算的另一条线)。

所有这些只是为了更直观地展示什么是图、张量流和运算,以便我们更好地理解为什么张量流被称为“使用数据流图进行数值计算的开源软件库”。但是我们为什么要创建这些图表呢?

为什么要创建图表?目前,张量流只有稳定的python API,而python是一种解释性语言。神经网络需要大量的计算,而大型神经网络包含数千甚至数百万的权值,因此通过解释每一步来计算的效率非常低。

因此,我们通过创建由张量和op组成的图来描述神经网络的结构,包括所有的数学运算甚至变量的初始值。只有在图形创建之后,才能将其加载到tensorflow中的会话中。这被称为张量流的“延迟执行”。会话用高效的代码运行计算图。此外,许多运算,如矩阵乘法,可以在gpu上完成。此外,tensorflow还支持多台机器或GPUs同时运行。

TensorFlow上手要点都总结在这儿了,你还有理由偷懒吗?

创建二进制计数器图以下是创建二进制计数器神经网络的脚本。完整的代码可以在我的github网页上找到。请注意,张量板中还存储有其他代码。

接下来,我们将从这些代码开始创建一个由张量和op组成的图。

首先,导入“张量流”模块,创建一个会话,然后使用它。同时,为了使脚本更容易理解,我们还创建了一些变量,包括网络中神经元的数量。

然后,我们为输入和输出神经元创建占位符。占位符是张量流中的一种运算,便于后续实际值的输入。这里x和y_是图中的两个张量,每个张量都有一个相关的占位符操作。

您可能想知道为什么我们将占位符形状定义为二维列表[无,num _ inputs和[无,num _ outputs,而第一维是“无”。总的来说,神经网络有点像我们一次输入一个值,然后训练它产生一个特定的输出值。但是更有效的方法是一次提供多个输入/输出对,这称为批处理。上图中的第一个维度是每批中有几组输入/输出对。在创建批处理之前,我们不知道有多少组。实际上,我们在以后的训练、测试和实际使用中会使用相同的图形,所以批量的大小不会每次都一样。因此,我们将第一维的大小设置为python占位符对象“无”。

TensorFlow上手要点都总结在这儿了,你还有理由偷懒吗?

接下来,我们创建神经网络图的第一层:权重定义为w_fc1,阈值(或偏差)定义为b_fc1,隐藏层定义为h_fc1。这里,“fc”表示“完全连接”,因为权重将每个输入神经元与每个隐藏神经元连接起来。

Tf.truncated_normal导致一系列的运算和张量,这些运算和张量将把所有的权重分配给标准化的随机数。

变量的操作将给出初始化值,这是一个随机数,可以在以后多次引用。一旦训练完成,神经网络可以方便地保存到文件中。

你可以看到我们在哪里使用matmul运算来执行矩阵乘法。我们插入一个加法运算来增加偏差权重。relu操作是“激活功能”。矩阵乘法和加法是线性运算。神经网络对线性运算几乎无能为力。激活方程提供了一些非线性。此处的relu激活功能是将所有小于0的值设置为0,其他值保持不变。信不信由你,这为神经网络的学习打开了一扇新的大门。

TensorFlow上手要点都总结在这儿了,你还有理由偷懒吗?

神经网络第二层的权值和阈值与第一层相同,但输出层不同。我们再次乘以矩阵,这次乘以权重和隐藏层,然后加上偏置权重,激活函数保存到下一组代码中。

与上面的relu类似,sigmoid是另一个激活函数,它也是非线性的。我在这里使用sigmoid函数,部分原因是它可以使最终输出值介于0和1之间,这是二进制计数器的理想选择。在我们的示例中,为了表示二进制111,所有输出神经元都可以有一个大值。这不同于图像分类,图像分类只希望使用一个输出单元来输出一个大的值。例如,如果图像中有一只长颈鹿,我们希望代表长颈鹿的输出单元输出一个相当大的值。在这种情况下,使用softmax函数作为激活函数更合适。

TensorFlow上手要点都总结在这儿了,你还有理由偷懒吗?

如果您仔细查看前面的代码,您会发现似乎有一些重复。我们插入了两次乙状结肠。实际上,我们创建了两个不同的并行输出。其中交叉熵张量将用于训练神经网络。结果张量用于以后执行训练的神经网络,不管它是为了什么目的而训练的。这是目前我能想到的最好的方法。

最后一件事是训练。也就是说,基于训练数据调整所有权重。请记住,这里我们仍然只是在创建一个图表。真正的“训练”发生在我们开始运行这个图表的时候。

在运行过程中有很多优化器可供选择,这里我选择TF . train . rmsproptimizer,因为和sigmoid一样,它更适合所有输出值都很大的情况。但是,对于分类情况,如图像分类,TF。火车。渐变优化器可能更好。

训练和使用二进制计数器您可以在创建完图形后开始训练。

首先,需要准备一些训练数据,包括输入变量输入和目标变量目标值。其中输入项包含输入值,每个输入值都有一个相应的目标值targetvals。例如,输入值[0]是[0,0,0],相应的输出或目标值是targetvals[0],即[0,0,1]。

do_training和save _ trained都可以硬编码,并且每次都可以更改,或者使用命令行参数进行设置。

首先,所有变量运算都初始化为张量。然后,从底部开始执行之前创建的图形,最多不超过10001次;这是图表中最后添加的内容。我们通过rmspropoptimizer将输入和目标导入到train_step操作中。这是通过调整权重在给定输入值下保持输出值接近目标值的步骤。只要输出值和目标值之间的误差足够小到一定的容许范围,循环就会停止。

TensorFlow上手要点都总结在这儿了,你还有理由偷懒吗?

如果您有数百个输入/输出组,您可以一次训练一个子集,即前面提到的批处理。但是我们这里只有八个小组,所以每次都把他们都放进去。

我们也可以将训练好的神经网络保存在一个文件中,这样我们下次就不需要再训练了。下一次,我们可以直接导入一个经过训练的神经网络文件,它只包含变量运算后的张量值,而不包含整个图的结构。因此,即使我们执行训练好的图,我们仍然需要脚本来创建图。元图形可以保存文件和导入图形,但我们在这里不这样做。

请注意,我们从图的底部运行到结果张量,在训练网络中重复创建结果。

我们输入000并期望它返回一个接近001的值。然后重复输入返回值并再次执行。这样,它总共运行9次,确保从000到111有足够的次数,然后再次返回000。

以下是成功培训后的输出。在周期(步骤)中训练200次。在实践中,经过10001次训练后,训练误差没有有效减少的情况非常罕见。一旦训练成功,你训练多少次并不重要。

运行二进制计数器

正如下一步前面提到的,这里描述的二进制计数神经网络代码可以在我的github主页上找到。你可以从这些代码中学习,或者在tensorflow官方网站上观看其他入门教程。接下来,我想通过机器人识别物体的灵感来做一些硬件研究。

雷锋编的《Viahackaday》

“张量流&神经网络算法高级应用类”即将开始!

从初级到高级,理论+实战,一站式深入了解张量流!

本课程面向深入学习的开发人员,教授如何使用张量流解决特定问题,如图像识别和文本分析。为期10周的课程将从张量流的原理和基本实践技能开始,逐步教会学生如何在张量流上构建cnn、自编码、rnn、gan等模型,最终掌握一套基于张量流的深度学习和发展的专业技能。

作为思想工作的高级技术专家,童达和白华川两位教师在构建大数据平台和开发深度学习系统方面有着丰富的经验。

时间:每周二和周四晚上20: 00到21: 00

课程时长:共20小时,10周完成,每周2次,每次1小时

在线教学地址:lae iphone/special/custom/mooc 04

张量流&神经网络算法高级应用类即将开始!

从初级到高级,理论+实战,一站式深入了解张量流!

本课程面向深入学习的开发人员,教授如何使用张量流解决特定问题,如图像识别和文本分析。为期10周的课程将从张量流的原理和基本实践技能开始,逐步教会学生如何在张量流上构建cnn、自编码、rnn、gan等模型,最终掌握一套基于张量流的深度学习和发展的专业技能。

作为思想工作的高级技术专家,童达和白华川两位教师在构建大数据平台和开发深度学习系统方面有着丰富的经验。

时间:每周二和周四晚上20: 00到21: 00

课程时长:共20小时,10周完成,每周2次,每次1小时

在线教学地址:mooc.ai/

相关文章:

万事开头难!为了开始张量流,tf男孩必须理解这9个问题

推荐|思想工厂丹尼尔教你如何开始使用张量流

教你从零开始在张量流上构建rnn(完整代码)!

雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。

来源:搜狐微门户

标题:TensorFlow上手要点都总结在这儿了,你还有理由偷懒吗?

地址:http://www.shwmhw.com/shxw/62915.html