热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是tensorflow

什么是tensorflowtenroflow是Google开源软件库,为机器学习工程中的问题提供了一整套解决方案。类比于SparkFlink是大数据工程问题的解决方案。该软件库把机


什么是tensorflow


tenroflow是Google开源软件库,为机器学习工程中的问题提供了一整套解决方案。类比于Spark/Flink是大数据工程问题的解决方案。
该软件库把机器学习中的通用功能封装成了库,并提供了简易的API,使得在构建机器学习系统时不再需要做那些纷繁复杂的数学或
者工程工作,能把主要精力放在模型和业务上。这就像现在使用编程语言进行编程时,不再需要知道计算机硬件的细节,不用知道CPU的指令集。从这个意义上说,tensorflow
让机器学习工程从汇编语言时代,上升到了高级语言时代。使得机器学习这种曾经只存在于实验室由高级专业人才能把玩的高端技术变成了
幼儿园小朋友手里的玩具。


什么是机器学习?


机器学习工程中又遇到了哪些问题?机器学习是实现人工智能的一种方式。什么是人工智能?什么是智能?


什么是智能?


目前还没有统一的定义。但是可以肯定的是人具有最高的智能。其他生命也有不同程度的智能。一只猫,一只蚂蚁,一只蚊子我们都认为它们有不同程度的智能。人工智能是人能制造出一种机器,这个机器能像生命智能一样工作。如可以听说读写,可以走路开车,可以辨认图片。就拿辨认图片来说,如辨认图片中的动物是不是一只猫。这个过程可以简化为三步, 看图片,大脑进行思考判断,回答是或者否。这个过程被抽象为一个数据的函数$y=f_w(x)$。x是输入的图片,y是判断的结果(是、否), f是大脑思考,w是大脑中的一些状态。所以智能就是这里的f和w。如何得到f和w就是人工智能中最重要的问题。计算机的发展给人工智能带来希望。f可以是运行在计算机上的程序,w是这个程序的参数。x,y是程序的输入和输出,由于需要计算机处理,所以x,y必须数字化。


  • 传统人工智能:人为编写规则构成f

最明显的就是游戏中AI的实现。由人工编写了复杂的规则,如当敌人距离自己w1米时该干什么,当自己的血量

  • 现代人智能:机器学习出f

如果我们有大量的x,y,能否由机器自己学习出f和w?

机器学习就是建立在这种指导思想之上。首先我们构建一个函数f, 他的参数是w. y_pred=f_w(x)  y_real是真实值。 loss=(y_pred-y_real)^2。loss, f_w都是人为构建的。比如loss,我们想用它表示真实值和预测值之间的差距,刚好方差能满足我们的需求,当然也有其他函数能满足,人为挑选即可。 同样,f_w也是我们人为挑选的函数,参数w初始值可以是随机值。 只要loss可导,那么我们就可以用梯度下降法来调整参数w去逼近loss的最小值。至于为什么要用梯度下降法也是人为选择的。在这里数学是我们的工具箱。我们要找到一个函数能与现实相符合。


如果我们有两条数据(x1,y1),(x2,y2), loss = (y_pred1-y_real1)^2 + (y_pred2-y_real2)^2。 如果有n条数据,n特别大,如有几个亿,那么loss函数将十分巨大,计算还是求导都十分困难。因此,把n条数据分为大小为m的batch, 每个batch有m条数据,共batch_num = n/m个batch。 每次求导,更新参数,只用一个batch,这样计算量会小很多。 同时把所有batch过一遍称为一个epoch, 经过几个epoch,loss可能不再减小,稳定到一个固定值附近,这种情况就叫模型已经收敛。训练结束。  训练结束后,需要对模型进行评估,这就需要在训练前,把一部分数据拿出来,不参与训练,此时就可以在这部分拿出来的数据上用模型进行预测,并计算loss, 或者预测准备率,就能知道模型的效果。当然,这只是简单的模型离线评估,离线评估有很多其他方法。除此之外,模型上线后还可以进行如A/B测试这样的线上评估。 后边就是如此往复,改进模型,训练,评估。



机器学习中的工程问题


在一个基于机器学习的系统中有很多工程工作需要做。主要是为了服务于y=f_w(x), loss=(y_pred-y_real)^2这两个函数。首先得有大量的(x,y),其次要构建一个合适的f和loss。
最后还要用计算机程序实现f,loss,梯度的计算和参数w的更新。 那么剩下的离线评估,上线,在线评估就水到渠成了。


  • 数据收集(x,y)

收集用户的数据,如用户点击,评论,浏览的内容,用户的性别年龄等等。又如图像识别中要收集大量的图片。


  • 特征工程(x,y)

 数据收集部分收集的数据可能不能直接输入模型,需要一定的处理,对于类别特征,如性别,爱好等等,需要以数字编码,对于数值特征 ,如年龄,收入,可以直接用,但是
一般会做归一化处理,以免数值差距较大的特征影响模型效果。经过这一步,x,y将被处理成两个向量如x=[0.1, 0, 0.234, ...] y = 0.  这样的n个(x,y)叫做训练样本,可以直接给y=f_w(x)作为输入了。


  • 模型构建(f_w)

这是一个寻找一个适合的函数的过程,简单如y=wx+b, 复杂如深度神经网络。深度神经网络有个特点,能表示任意函数,它也能表示y=kx+b.所以自从深度神经网络出现后人们就不用再费尽心机构造合适的数学模型了。


  • 模型训练(train)

既然f_w已经确定,剩下的就是要编程实现整个训练过程了,无非是一些数学计算,涉及矩阵运算,微分计算,损失函数计算,梯度计算,参数更新。只要我们一一实现即可。
训练中把特征工程中的数据分成一个个小的batch,进行迭代,直到模型收敛,即损失Loss达到最小值。训练过程可能是个漫长的过程,我们想时刻监控当前的训练状态,如当前的loss,训练的进度等等,这还需要一套可视化的监控系统。


  • 离线评估

特征工程中的数据要成训练集train和测试集test. 训练过程只使用train,训练完成后在test上计算loss,正确率等等指标评估模型,当然评估方式还有很多。


  • 模型上线

将训练好的模型部署成服务端集群,等待线上求参入参数x,计算出y_pred返回。


  • 在线评估

使用A/B测试等等再线评估方法对模型进行评估。然后再回头去调优模型。

以上就是机器学习在工程应用中需要做的事儿,当然可以不使用任何框架,从0开始编程实现,从一个矩阵计算,向量乘法来实现,如果这么做,那么工程量浩大。经过多年的发展,这些通用的基本功能已经被前人封装成可以重用的库。我们不需要从0开始。 tensorflow就是为解决上述问题而实现的一整套库。



推荐阅读
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 本文详细介绍如何通过Anaconda 3.5.01快速安装TensorFlow,包括环境配置和具体步骤。 ... [详细]
  • 全面解读Apache Flink的核心架构与优势
    Apache Flink作为大数据处理领域的新兴力量,凭借其独特的流处理能力和高效的批处理性能,迅速获得了广泛的关注。本文旨在深入探讨Flink的关键技术特点及其应用场景,为大数据处理提供新的视角。 ... [详细]
  • 计算机视觉初学者指南:如何顺利入门
    本文旨在为计算机视觉领域的初学者提供一套全面的入门指南,涵盖基础知识、技术工具、学习资源等方面,帮助读者快速掌握计算机视觉的核心概念和技术。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • PySpark实战:高效使用DataFrame超越RDD
    本文深入探讨了PySpark中DataFrame的使用方法及其相对于传统RDD的优势,旨在帮助开发者更好地理解和利用这一强大工具。 ... [详细]
  • 本文详细介绍了如何配置Apache Flume与Spark Streaming,实现高效的数据传输。文中提供了两种集成方案,旨在帮助用户根据具体需求选择最合适的配置方法。 ... [详细]
  • ODBC介绍:开放式数据库连接详解
    本文详细介绍了ODBC(开放式数据库连接),这是一种允许应用程序访问多种数据库系统的标准API。自1992年由微软与Simba合作推出以来,ODBC已成为跨平台数据访问的重要标准。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 知识图谱与图神经网络在金融科技中的应用探讨
    本文详细介绍了融慧金科AI Lab负责人张凯博士在2020爱分析·中国人工智能高峰论坛上的演讲,探讨了知识图谱与图神经网络模型如何在金融科技领域发挥重要作用。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
author-avatar
手机用户2702932807
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有