迈入TensorFlow的行列:教你写自己的程序
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》
在本文中,我们将使用Python在TensorFlow中实现一个非常基本的程序,以便在实际中看到它。
TensorFlow中的计算包含两个阶段:
构建计算图
运行计算图
计算图是之前提到的数据流图。 数据流图的每个节点将有助于评估TensorFlow计算的操作。在TensorFlow中,每个节点将零个或多个张量作为输入,并产生一个张量作为输出。
一种类型的节点是不变的,不需要输入,并输出一个内部存储的值。我们来看看如何在TensorFlow中定义一个常量。
输出的语句将是:
请注意,输出不是9.0或19.0,而是张量对象。这是因为我们只是建立了计算图,但没有运行它。在运行之前,让我们看看上面的输出是什么意思。
在Tensor对象中,***个参数是该张量的名称。名称的Const部分由TensorFlow本身分配给它,而不是程序员明确给出的。生成的名称后面跟着一个:,后面跟着一个数字(在这个例子中是0)。这个数字是正在命名的张量的索引。
这意味着,一个节点可以产生多个输出或多个张量。在这种情况下,这个数字将成为输出中每个张量的下标。在这里,虽然只有一个输出,所以张量被赋值为0.如果还有一个输出,则该张量将被赋值为1。
第二个参数表示该张量的形状。。第三种类型是张量的数据类型。你可以明确地给它,就像***个常量做的那样,或者TensorFlow也可以对它进行推断,就像第二个常量那样。
如果我们想将9.0和19.0看作输出,我们将不得不实际运行刚刚构建的计算图。要做到这一点,必须创建一个回话对象并调用它的run方法。可以这样做,如下所示:
上述代码的输出将是9.0和19.0。
现在,添加这两个常量。 添加是一个操作,操作只是TensorFlow中的另一个节点。
上述代码的输出为:
这里,+只是tf . add()的一个简写。
那么,如何将自己的价值观传递给它呢?为了达到这些目的,占位符出现在图片中。占位符是稍后提供一个值的承诺。让我们快速创建两个占位符,并对它们执行操作,以便在操作中方便查看。
这里,myValue1和myValue2都是占位符,其值稍后将提供。请注意,这里给出的数据类型是强制的(dtype)。在调用会话对象的run方法时,可以提供占位符的值,如上面的示例所示。这些值是在run方法的feed_dict参数中提供的。因此,上述代码的输出为:
但是机器学习的重点是让我们的数据可训练,以便我们可以训练它,根据训练结果对其进行优化,并且实现一个能够在真实数据上几乎工作的模型。
那么,如何使我们的数据在TensorFlow中可以训练呢? 为了达到这个目的, 变量允许我们将可训练参数添加到我们的程序中。 变量定义如下:
Evey变量被初始化为一个值(在这种情况下为2.0),并给出一个数据类型是可选的。 但是变量只是用上面的方式定义的;,它尚未初始化。当你调用tf.Variable时,变量不会被初始化。 要初始化TensorFlow程序中的所有变量,必须显式调用一个特殊操作,如下所示:
重要的是要认识到init是对初始化所有全局变量的TensorFlow子图的一个句柄。在调用sess. run之前,变量未初始化。
输出myVariable = 2.0。 如果我们想改变变量的值,可以使用assign函数,如下所示:
(这将输出10.0)
好的,现在已经清楚了写一个TensorFlow程序的基本条件,然后采取一个非常简单的例子来实现它。 我们将实施以下模式:
我们将为zheg程序提供一些训练数据,即x的某些值和y的所需值,根据训练数据计算W的值,然后提供测试数据以查看结果的精确度测试数据。由于采用了非常简单的模型,因此准确度可以轻松达到100%。 但是,在真实和更复杂的模型中,这几乎不会发生。 但为了理解的目的,可以这样做。
由于我们将提供x和y的值,将声明它们为占位符。由于每个输入都必须改变W的值,把它声明为一个具有初始值的变量, 假设1.声明将会是这样的:
现在,我们将定义简单的模型如下:
现在,为了训练数据并更接近真实模型,我们将不得不编写一个损失函数,然后将其最小化。为了简单起见,我们将平方误差的和作为损失函数。 错误只不过是结果使用我们的模型和期望值(y)之间的差异。
然后将对每个输入进行平方,并添加它们。 以下是相同的执行情况:
为了简单起见,我们将基于梯度下降优化器的概念(如果你不知道这个问题,请不要担心,请继续阅读)来构建自己的小优化器,以纠正W的值,然后对其进行测试 。
要做的就是计算模型的损失,操纵W的价值以最小化损失,检查损失是否减少,并根据损失的结果进一步操纵W的价值。 为这个优化器编写的代码如下所示:
可以肯定,损失可以达到0,因为我们使用了一个简单的模型。对于更复杂的模型,可以适当地改变条件。
在上面的代码中,加法和减法是用于记忆上一次执行什么操作(加法或减法)的标志。 currentLoss是在循环开始时存储损失函数值的变量,oldLoss是在循环结束时存储损失函数值的变量。这两个变量在循环之间进行比较以检查操作(加法或减法)如何影响损失值,即减小或增加损失值。在此基础上进行进一步的操作。要么W的值减1或增加1.这只是一个示例优化器。优秀的优化器要复杂得多,效率也很高,很多已经在TensorFlow中实现了。这只是一个示例优化器,可能无法***运行,但是可以给你一个TensorFlow如何工作的概念,这就是文章的主要目标。上面编写的代码在读完之后很容易理解,本文中讨论了代码中使用的所有内容。
对于输入,给出了[1,2,3,4]的x和[10,20,30,40]的y(期望值)。所以,可以看到,W的值应该是10.0,我们目前已经初始化为1.0。模型应该使用提供给它的训练数据,并将W从1.0变换到10.0,在测试数据上使用W。
要运行程序,必须初始化全局变量,创建一个会话对象,并在全局变量句柄上调用它的run方法,如下所示:
到这就基本结束了, 为了检查W的值,我们将在***放置一个输出语句:
这将在运行时输出10.0作为输出。这意味着W的值从1.0更改为10.0。如果我们为模型提供其他数据来检查y的值,那么就应该得到10倍的值。我在代码后面加上三个输出语句检查输出:
得到的输出是:
正如预期的那,本文是以一种比较简单又容易理解的方式来解释概念。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2017百度世界大会 AI让百度重拾主动权
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 11月16日,百度副总裁、AI技术平台体系(AIG)总负责人王海峰在“百度世界”2017 AI技术与平台论坛上表达了上述观点。他表示,AI作为新的生产力,积极为行业赋能,创造新的行业。百度在实践中已经大量应用AI技术,不仅提升了生产率,也创造了全新的价值。同时,百度正在将这些AI能力全面开放,与合作伙伴和广大开发者一起,建设AI生态,希望全社会都参与到以AI为核心驱动力的工业革***来。 在主题为“让新技术更懂新时代”的百度世界AI技术与平台论坛上,百度奉献了内涵丰富的AI技术盛宴。不仅有全新的语音、视觉技术解决方案,还包括开源的深度学习平台PaddlePaddle升级,“BROAD”公开数据集发布计划等。同时,百度AI商业化团队也正式亮相,宣布了数据智能平台与智慧机场两项行业解决方案,并举办了一场关于智能客服的行业研讨会。 王海峰在论坛开场演讲中表示,百度各业务通过AI赋能,在提升生产率和创造新价值方面均取得显著成果。例如,百度信息流应用自然语言处理技术对内容质量进行识别,每天可减少上亿低质内容的分发,编辑人工效...
- 下一篇
最全的服务器硬盘接口分类
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 服务器硬盘接口有哪些种类 一、风光依旧的SATA接口 SATA接口又被称之为“串行接口”,所以现在采用SATA接口的硬盘都被习惯的叫做串口硬盘。它是继IDE硬盘之后的一次演变。SATA的物理设计是以光纤通道作为蓝本,所以采用了四芯的数据线。SATA接口发展至今主要有3种规格,其中目前普遍使用的是SATA-2规格,传输速度可达3GB/秒,如图1所示为某品牌固态硬盘采用的SATA-2接口规格。 图1 SATA-2接口示意 现在已经有SATA-3接口出现,如图3所示即为西部数据的一款SATA-3接口的服务器硬盘。SATA-3接口除了将传输速率提高到了6GB/秒之外,还对诸多数据类型提供了读取优化设置。当然对于用户来说,SATA-3接口的出现并不意味着现有的SATA-2产品会被淘汰,因为SATA-3虽然采用了全新INCITS ATA8-ACS标准,但依然可以兼容旧有的SATA设备。 图2 SATA-3接口示意 由于SATA接口的服务器硬盘,技术相当成熟而且构造成本不高,因此相对于其他接口类型的产品来说,其市场价位是比较平民...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Mario游戏-低调大师作品
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案