侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Tensorflow基础(机器学习开源软件库)

技术  /  管理员 发布于 7年前   189

说明:本文实例使用Python版本为3.5.6,Tensorflow版本为2.0

介绍

Tensorflow是Google推出的机器学习开源神器,对Python有着良好的语言支持,支持CPU,GPU和Google TPU等硬件,并且已经拥有了各种各样的模型和算法。目前,Tensorflow已被广泛应用于文本处理,语音识别和图像识别等多项机器学习和深度学习领域。

基础框架

分为三层:应用层、接口层和核心层

推荐:《python教程》

应用层

提供了机器学习相关的训练库、预测库和针对Python、C++和Java等变成语言的编程环境,类似于web系统的前端,主要实现了对计算图的构造。

接口层

对Tensorflow功能模块的封装,便于其它语言平台的调用。

核心层

最重要的部分,包括设备层、网络层、数据操作层和图计算层,执行应用层的计算。

1.设备层

包括Tensorflow在不同硬件设备上的实现,主要支持CPU、GPU和Mobile等设备,在不同硬件设备上实现计算命令的转换,给上层提供统一的接口,实现程序的跨平台功能。

2.网络层

网络层主要包括RPC和RDMA通信协议,实现不同设备之间的数据传输和更新,这些协议都会在分布式计算中用到。

3.数据操作层

以tensor为处理对象,实现tensor的各种操作和计算。

4.图计算层

包括分布式计算图和本地计算图的实现,实现图的创建、编译、优化和执行等。

设计理念

可以将Tensorflow理解为一张计算图中“张量的流动”,其中,Tensor(张量)代表了计算图中的边,Flow(流动)代表了计算图中节点所做的操作而形成的数据流动。

其设计理念是以数据流为核心,当构建相应的机器学习模型后,使用训练数据在模型中进行数据流动,同时将结果以反向传播的方式反馈给模型中的参数,以进行调参,使用调整后的参数对训练数据再次进行迭代计算。

编程特点

有两个编程特点:

图的定义和图的运行完全分开

在tensorflow中,需要预先定义各种变量,建立相关的数据流图,在数据流图中创建各种变量之间的计算关系,完成图的定义,需要把运算的输入数据放进去后,才会形成输出值。

图的计算在会话中执行

tensorflow的相关计算在图中进行定义,而图的具体运行坏境在会话(session)中,开启会话后,才能开始计算,关闭会话就不能再进行计算了。

举个例子:

import tensorflow as tftf.compat.v1.disable_eager_execution()a = 3b = 4c = 5y = tf.add(a*b, c)print(y)a = tf.constant(3, tf.int32)b = tf.constant(4, tf.int32)c = tf.constant(5, tf.int32)y = tf.add(a*b, c)print(y)session = tf.compat.v1.Session()print(session.run(y))session.close()

可以看出,在图创建后,并在会话中执行数据计算,最终输出结果。

设计的好处就是:学习的过程中,消耗最多的是对数据的训练,这样设计的话,当进行计算时,图已经确定,计算就只剩下一个不断迭代的过程。

基本概念

Tensor

张量,是tensorflow中最主要的数据结构,张量用于在计算图中进行数据传递,创建了张量后,需要将其赋值给一个变量或占位符,之后才会将该张量添加到计算图中。

session

会话,是Tensorflow中计算图的具体执行者,与图进行实际的交互。一个会话中可以有多个图,会话的主要目的是将训练数据添加到图中进行计算,也可以修改图的结构。

调用模式推荐使用with语句:

with session:    session.run()Variable

变量,表示图中的各个计算参数,通过调整这些变量的状态来优化机器学习算法。创建变量应使用tf.Variable(),通过输入一个张量,返回一个变量,变量声明后需进行初始化才能使用。

举例说明:

import tensorflow as tftf.compat.v1.disable_eager_execution()tensor = tf.ones([1, 3])test_var = tf.Variable(tensor)# 初始化变量init_op = tf.compat.v1.global_variables_initializer()session = tf.compat.v1.Session()with session:    print("tensor is ", session.run(tensor))    # print("test_var is ", session.run(test_var))    session.run(init_op)    print("after init, test_var is", session.run(test_var))

Placeholder

占位符,用于表示输入输出数据的格式,声明了数据位置,允许传入指定类型和形状的数据,通过会话中的feed_dict参数获取数据,在计算图运行时使用获取的数据进行计算,计算完毕后获取的数据就会消失。

举例说明:

x = tf.compat.v1.placeholder(tf.int32)y = tf.compat.v1.placeholder(tf.int32)z = tf.add(x, y)session = tf.compat.v1.Session()with session:    print(session.run([z], feed_dict={x: [1, 2], y: [2, 3]}))

Operation

操作,是图中的节点,输入输出都是Tensor,作用是完成各种操作,包括:

数学运算:add, sub, mul, div, exp ...

数组运算:concat, slice, split, rank ...

矩阵运算:matmul, matrixinverse ...

神经网络构建:softmax, sigmoid, relu ...

检查点:save, restore ...

队列和同步:enqueue, dequeue, mutexacquire, mutexrelease ...

张量控制:merge, switch, enter, leave ...

Queue

队列,图中有状态的节点。包含入列(endqueue)和出列(dequeue)两个操作,入列返回计算图中的一个操作节点,出列返回一个tensor值。

其中,队列有两种:

1. FIFOQueue

按入列顺序出列的队列,在需要读入的训练样本有序时使用。举个例子:

fifo_queue = tf.compat.v1.FIFOQueue(10, 'int32')init = fifo_queue.enqueue_many(([1, 2, 3, 4, 5, 6], ))with tf.compat.v1.Session() as session:    session.run(init)    queue_size = session.run(fifo_queue.size())    for item in range(queue_size):        print('fifo_queue', session.run(fifo_queue.dequeue()))

2. RandomShuffleQueue

以随机顺序出列的队列,读入的训练样本无序时使用。举个例子:

rs_queue = tf.compat.v1.RandomShuffleQueue(capacity=5, min_after_dequeue=0, dtypes='int32')init = rs_queue.enqueue_many(([1, 2, 3, 4, 5], ))with tf.compat.v1.Session() as session:    session.run(init)    queue_size = session.run(rs_queue.size())    for i in range(queue_size):        print('rs_queue', session.run(rs_queue.dequeue()))

本文来自 python教程 栏目,欢迎学习!

以上就是Tensorflow基础(机器学习开源软件库)的详细内容,更多请关注其它相关文章!


  • 上一条:
    深入了解数组、List和ArrayList的区别
    下一条:
    修改XP系统的开始菜单背景图片的方法(图)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客