TensorFlow介绍

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,
但这个系统的通用性使其也可广泛用于其他计算领域。它是谷歌基于DistBelief进行研发的第二代人工智能学习系统。2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源。
其命名来源于本身的原理,Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算。Tensorflow运行过程就是张量从图的一端流动到另一端的计算过程。张量从图中流过的直观图像是其取名为“TensorFlow”的原因。

关键点

TensorFlow的关键点:Data Flow Graphs!
TensorFlow是一种基于图的计算框架,其中节点(nodes)在图中表示数学操作,线(edges)表示在节点间互相联系的多维数据数组,即张量(Tensor),这种基于流的框架让TensorFlow具有非常高的灵活性,可以在多个平台上进行计算,如台式计算机,服务器,移动设备等。TensorFlow的开发过程重点在于构建执行流图

数据流图使用节点和线的有向图描述数学计算,节点一般用来表示施加的数学操作,也可以表示数据输入的起点和输出的重点或者读取/写入持久变量的重点,线表示的是节点之间的输入/输出关系,这些线可以输运“size可动态调整”的多维数组,即张量(Tensor);一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。

特性

  • 高度的灵活性:只要能够将计算表示成为一个数据流图,就可以使用TensorFlow
  • 可移植性:TensorFlow支持CPU和GPU的运算,并且可以运行在台式机,服务器,手机移动端设备等
  • 自动求微分:TensorFlow内部实现了自动对于各种给定目标函数求导的方式
  • 多语言支持:Python,C++
  • 性能高度优化

TensorFlow神经网络直观案例
GitHub
Website

why choose?

机器学习处理的数据量即效果都陷入瓶颈,深度学习开拓了新思路。

【深度学习框架的使用(市占率)占比】

【框架对比】

TensorFlow安装

要求:Python必须是64位
根据TensorFlow的计算方式,TensorFlow的安装分位CPU版本和GPU版本:

  • 对于Python3.5、3.6版本,pip install tensorflow==1.40(安装CPU)和pip install tensorflow-gpu==1.40(安装GPU)
  • 安装到GPU上,默认在GPU上运行,可以指定CPU上运行,因为GPU的运行速度比CPU快,所以会尽可能的运行在GPU上
  • 对于Python2.7,只能通过源码编译来安装TensorFlow(Windows操作系统)
  • TensorFlow-GPU要求机器的显卡必须是NVidia的显卡

CUDA下载安装链接 and cuDNN下载安装链接

  • 安装CUDA:
    具体的CUDA版本根据”import tensorflow”时提示的异常来选择,cuDNN选择和CUDA对应版本即可
  • 安装cuDNN:
    将cuDNN的压缩包解压后的三个文件夹全部放到CUDA对应的根目录下,根据环境变量找到对应的目录

TensorFlow基本概念

  • 图(Graph):图描述了计算的过程,TensorFlow使用图来表示计算任务。
  • 张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor是一个类型化
    的多维数组。
  • 操作(op):图中的节点被称为op(opearation的缩写),一个op获得/输入
    0个或多个Tensor,执行计算,产生0个或多个Tensor。
  • 会话(Session):图必须在称之为“会话”的上下文中执行。会话将图的op分
    发到诸如CPU或GPU之类的设备上执行。
  • 变量(Variable):运行过程中可以被改变,用于维护状态
  • :TensorFlow的边即有两种连接关系:数据依赖和控制依赖

    实线边表示数据依赖,代表数据,即张量。任意维度的数据统称为张量,在机器学习算法中,张量在数据流图中从前往后流动一边就完成前向传播,而残差从后向前流动一遍就完成一次反向传播
    虚线边表示控制依赖,可以用于控制操作的运行,这被用来确保happens-before关系,这类边上没有数据流过,但源节点必须在目的节点开始执行前完成

  • 供给(Feeds)和取回(Fetches):将数据传入或传出任何操作

  • 节点:又称为算子,表示一个操作。一般用来表示施加的数字运算,也可以表示数据输入的起点以及输出的终点,或者是读取/写入持久化变量的终点。

TensorFLow基本用法

TensorFlow可以认为是一种编程工具,使用TensorFlow来实现具体的业务需求,所以我们可以认为TensorFlow就是一个“工具箱”,然后我们使用TensorFlow这个“工具箱”中的各种“工具”(方法/API)来实现各种功能,比如使用TensorFlow实现基本的数值计算、机器学习、深度学习等TensorFlow的程序一般分为两个阶段:构建阶段和执行阶段

  • 构建阶段:op的执行步骤被描述成为一个图,然后使用TensorFlow提供的API构建这个图,用于组织计算图。
  • 执行阶段:将构建好的执行图在给定的会话中执行,并得到执行结果。利用session中执行计算图中的op操作

例如在构建阶段创建一个图来表示和训练神经网络,然后在执行阶段反复执行一组op来实现图中的训练。

构建计算图

刚开始基于op建立图的时候一般不需要任何的输入源(source op),例如输入常量(constance),再将它们传递给其他op执行运算。Python库中的op构造函数返回代表已被组织好的op作为输出对象,这些对象可以传递给其它op构造函数作为输入。
TensorFlow Python库中有一个可被op构造函数加入计算结点的默认图(default graph)。对于大多数应用来说,这个默认图已经够用了,不过TensorFlow也支持通过Graph类管理多个图。

import tensorflow as tf
#创建一个常量op,产生一个1*2的矩阵,这个op被作为一个节点
#默认是加入到默认图中
#构建器的返回值代表该常量op的返回值mat1=tf.constant([3,3],dtype=tf.float32,shape=[1,2])#创建另外一个常量op,产生一个2*1的矩阵
mat2=tf.constant([[2.],[2.]])#创建一个矩阵乘法op,将mat1和mat2作为输入
#返回值代表乘法op的结果
product=tf.matmul(mat1,mat2)# 不使用默认图,使用多个图进行编程;注意:操作必须在同一个图,不同图中的节点不能相连
graph = tf.Graph()
with graph.as_default():# 此时在这个代码块中,使用的就是新的定义的图graph(相当于把默认图换成了graph)d = tf.constant(5.0, name='d')print("变量d是否在新图graph中:{}".format(d.graph is graph))with tf.Graph().as_default() as g2:e = tf.constant(6.0)print("变量e是否在新图g2中:{}".format(e.graph is g2))# 这段代码是错误的用法,记住:不能使用两个图中的变量进行操作,只能对同一个图中的变量对象(张量)进行操作(op)
# f = tf.add(d, e)

执行过程

为了载入之前所构建的图,必须先创建一个会话对象,会话构建器在未指明参数时会载入默认的图。

#会话构建&启动(默认情况下(不给定Session的graph参数的情况下),创建的Session属于默认的图)
sess = tf.Session()
print(sess)# 调用sess的run方法来执行矩阵的乘法,得到c的结果值(所以将c作为参数传递进去)
# 不需要考虑图中间的运算,在运行的时候只需要关注最终结果对应的对象以及所需要的输入数据值
# 只需要传递进去所需要得到的结果对象,会自动的根据图中的依赖关系触发所有相关的OP操作的执行
# 如果op之间没有依赖关系,tensorflow底层会并行的执行op(有资源) --> 自动进行
# 如果传递的fetches是一个列表,那么返回值是一个list集合
# fetches:表示获取那个op操作的结果值
result = sess.run(fetches=[r, c])
print("type:{}, value:\n{}".format(type(result), result))# 会话关闭
sess.close()# 当一个会话关闭后,不能再使用了,所以下面两行代码错误
# result2 = sess.run(c)
# print(result2)

会话在完成后必须关闭以释放资源。也可以使用“with”句块开始一个会话,该会话将在“with”句块结束时自动关闭。

# 使用with语句块,会在with语句块执行完成后,自动的关闭session
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess2:print(sess2)# 获取张量c的结果: 通过Session的run方法获取print("sess2 run:{}".format(sess2.run(c)))# 获取张量r的结果:通过张量对象的eval方法获取,和Session的run方法一致print("c eval:{}".format(r.eval()))

TensorFlow事实上通过一个“翻译”过程,将定义的图转化为不同的可用计算资源间实现分布计算的操作,如CPU或GPU。通常不需要用户指定具体使用的CPU或GPU,TensorFlow能自动检测并尽可能的充分利用找到的第一个GPU进行计算。如果你的设备有不止一个GPU,需要明确指定op操作到不同的运算设备已调用它们:

with tf.Session() as sess:
#/cpu:0,/cpu:1,/gpu:0,/gpu:1with tf.divice("/gpu:1"):matrix1=tf.constant([[3.,3.]])matrix2=tf.constant([[2.],[2.]])product=tf.matmul(matrix1,matrix2)

交互式使用

像Ipython这样的交互式Python环境,可以使用InteractiveSession代替Session类,使用Tensor.eval()和Operation.run()方法代替Session.run(),这样可以避免使用一个变量来持有会话。

import tensorflow as tf
sess=tf.InteractiveSession()x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])x.initializer.run()sub=tf.sub(x,a)print(sub.eval())sess.close()

张量

TensorFlow程序使用tensor数据结构来代表所有的数据,计算图中,操作间传递的数据都是tensor,可以把TensorFlow的张量看作是一个n维的数组或列表。一个 tensor包含一个静态类型rank,和一个shape,以及type

a = tf.constant([[1, 2], [3, 4]], dtype=tf.int32, name='a')

变量

变量维持了图执行过程中的状态信息。下例中实现一个简单的计数器:

import tensorflow as tf
#建立一个变量,用0初始化它的值
state=tf.Variable(0,name="counter")
one=tf.constant(1)
## add和assign在调用run()执行表达式之前,不会真正执行赋值操作
new_value = tf.add(state, one)
update = tf.assign(state, new_value)# Variables must be initialized by running an `init` Op after having
# launched the graph. We first have to add the `init` Op to the graph.
init_op = tf.initialize_all_variables()
# Launch the graph and run the ops.
with tf.Session() as sess:# Run the 'init' opsess.run(init_op)# Print the initial value of 'state'print(sess.run(state))# Run the op that updates 'state' and print 'state'.for _ in range(3):sess.run(update)print(sess.run(state))

Fetches 取回

为了取回操作的输出内容,可以使用Session对象的run()调用执行图时,传入一些tensor,这些tensor会帮助你取回结果。

import tensorflow as tfinput1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.multiply(input1, intermed)with tf.Session() as sess:result = sess.run([mul, intermed])print(result)

获取多个tensor值,在op的一次运行中一起获得(而不是逐个去获取)

Fetches 供给

tensor以常量或变量的形式存储。TensorFlow提供feed机制,该机制可临时替代图中的任意操作中的tensor可以对图中任何操作提交补丁,直接插入一个tensor。
feed使用一个tensor值临时替换一个操作的输出结果。可以提供feed数据作为run()调用的参数。feed只在调用它的方法内有效,方法结束,feed会消失。最常见的用例是将某些特殊的操作指定为“feed”操作,标记的方法是使用tf.placeholder()为这些操作创建占位符。

import tensorflow as tfinput1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)with tf.Session() as sess:print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))# output:
# [array([ 14.], dtype=float32)]

如果没有正确供给,placeholder()操作将会产生一个错误提示。

TensorFlow基础(1)特点安装基本用法相关推荐

  1. TensorFlow基础剖析

    TensorFlow基础剖析 一.概述 TensorFlow 是一个使用数据流图 (Dataflow Graph) 表达数值计算的开源软件库.它使用节点表示抽象的数学计算,并使用 OP 表达计算的逻辑 ...

  2. 附录5:TensorFlow基础(一)

    目录 TensorFlow简介 什么是tensorflow tensorflow的核心 Numpy与TensorFlow Tensorflow基本操作 初步认识tensorflow与tensorboa ...

  3. TF学习:Tensorflow基础案例、经典案例集合——基于python编程代码的实现

    TF学习:Tensorflow基础案例.经典案例集合--基于python编程代码的实现 目录 Tensorflow的使用入门 1.TF:使用Tensorflow输出一句话 2.TF实现加法 3.TF实 ...

  4. DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略

    DL框架之Tensorflow:深度学习框架Tensorflow的简介.安装.使用方法之详细攻略 目录 Tensorflow的简介 1.描述 2.TensorFlow的六大特征 3.了解Tensorf ...

  5. [Python人工智能] 二.TensorFlow基础及一元直线预测案例

    从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇文章讲解了TensorFlow的安装过程和神经网络基础概念.这篇文章将分享TensorFlow基础并介绍一元直线 ...

  6. 深度学习(6)TensorFlow基础操作二: 创建Tensor

    深度学习(6)TensorFlow基础操作二: 创建Tensor 一. 创建方式 1. From Numpy,List 2. zeros,ones (1) tf.zeros() (2) tf.zero ...

  7. 机器学习Tensorflow基础知识、张量与变量

    TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组, ...

  8. 【Jetson-Nano】2.Tensorflow和Pytorch的安装

    文章目录 1.Tensorflow多版本安装 1.1 Protobuf 安装 1.2 安装依赖包及tensorflow1.15 1.3 安装其它常用库 1.4 测试python包是否安装成功 1.5 ...

  9. TensorFlow基础篇(六)——tf.nn.max_pool()和tf.nn.avg_pool()

    tf.nn.max_pool()和tf.nn.avg_pool()是TensorFlow中实现最大池化和平均池化的函数,在卷积神经网络中比较核心的方法. 有些和卷积很相似,可以参考TensorFlow ...

最新文章

  1. 深度强化学习的现在,将来与未来
  2. 2018年看好这些半导体企业
  3. Java字符编码根本原理
  4. java tomcat日志中文乱码问题解决
  5. 十大编程算法助程序员走上高手之路
  6. Spring事务处理流程和原理(动脑学院笔记)
  7. FullCalendar插件月视图正常显示周视图不正常显示问题解决方法
  8. 怎么样采集声音的波形和频率_示波器采集模式
  9. access字段类型varchar_数据库即将被淘汰的几种数据类型,烦恼还是解脱?
  10. iOS开发 控件不能绑定拖动到视图ViewController连接的解决方法
  11. iOS 浅谈:深.浅拷贝与copy.strong
  12. python函数名的应用、闭包和迭代器
  13. vista下,怎么为一个程序设置UAC的例外?
  14. 《DOOM启世录(纪念版) 》此书出了纪念版,好像内容没变
  15. 手机常见分辨率及代表机型
  16. 华为员工离职心声:菊厂15年退休,感恩,让我实现了财务自由!
  17. 同IP不同端口导致cookie冲突的解决方法
  18. 【redis源码学习】持久化机制(2):AOF
  19. Kroll任命Richard Davies担任网络风险业务副董事总经理,常驻香港
  20. SNS运营之Tumblr迅速涨粉的20个方法-适用于海外社媒推广,外贸独立站,自建站,让你粉丝快速翻倍

热门文章

  1. html右侧可隐藏导航栏,HTMLCSS----练习隐藏导航栏(三级导航)
  2. 【docker问题】Client.Timeout exceeded while awaiting header
  3. 当@PathVariable遇上了.
  4. oracle配置话清单,oracle 几个常用话语
  5. win10/win1桌面图标锁定,防止桌面图标移动
  6. 聚商汇WMS:开源仓库管理系统
  7. keil错误和解决办法(1):FCARM - Output Name not specified, please check ‘Options for Target - Utilities’
  8. c语言字符统计2sdut,山东理工大学SDUT - ACM OJ 题: Python代码 及分析
  9. Wireshark入门与进阶---Capture Options各项的含义与设定
  10. Java - JIT即时编译器