学习TensorFlow官方文档中文版 http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/basic_usage.html

一.基本使用

TensorFlow的基本特点:

1. 使用图(graph)来表示计算任务

2.在被称之为会话(session)的上下文(context)中执行图

3.使用tensor来表示数据

4.通过变量(variable)来维护状态

5.使用feed和fetch可以为任意的操作(arbitrary operation)赋值或者从其中获取数据

综述

TensorFlow使用图来表示计算任务,图中的节点称为op(operation)。一个op获得0个或多个tensor,执行计算,产生0个或多个tensor。每个tensor是一个类型化的多维数组。例如,你可以将一小组图像集表示为一个思维浮点数数组,如[batch,height,width,channels]

一个图描述了计算的过程。为了进行计算,图必须在会话中启动。会话将图的op分发到诸如CPU或GPU之类的设备上,同时执行op的方法。这些方法执行后,将产生的tensor返回。在python中,返回的tensorしnumpy ndarray对象。

计算图

TensorFlow一般组织成两个阶段:构建阶段和执行阶段。构建阶段中op的执行步骤被描述成一个图。在执行阶段,使用会话执行图中的op。典型的例子是,在构建阶段创建一张图来表示ヘ训练神经网络,然后在执行阶段反复执行图中的训练op

构建图

构建图的第一步,是创建源op(source op),它不需要任何输入。典型的op例如常量(constan)。其输出被传递给其它op做运算(就是神经网路的输入层?)

python中,op构造器的返回值代表被构造出的op的输出,这些返回值可以传递给其它op构造器作为输入

TensorFlow python库中有一个默认图,op构造器可以为其增加节点。这个默认图对于许多程序来说已经足够使用了。当然也可以管理多个图。

#!/usr/bin/env python

import os
os.environ['TF_CPP_MIN_LOG+LEVEL'] = '2'
import tensorflow as tf # 构建阶段
# 构建一个常量op,是一个1*2矩阵,该op被作为一个节点加到默认图中
matrix1 = tf.constant([[3.,3.]]) # 再构建一个常量op,这次是一个2*1矩阵
matrix2 = tf.constant([[2.],[2.]]) # 构建一个矩阵乘法matmul op,将前两个常量作为输入,返回值product代表矩阵乘法的结果
product = tf.matmul(matrix1,matrix2)

这样就在默认图中设置了3个节点,前两个为输入的constant节点,后一个为matmul节点。然而到这里执行程序并没有进行真正的矩阵相乘运算,为了得到真正进行矩阵相乘运算的结果,必须在后来的会话中启动这个图

在一个会话中启动会图

构造阶段完成后,就能够启动图。启动图的第一步是创建一个Session对象,如果无任何创建参数,会话构造器将启动默认图。

#运行阶段
#启动默认图
sess = tf.Session() # 调用sess的run方法来执行构建的矩阵乘法op,传入produ作为该方法的参数,是为了表明我们希望取回矩阵乘法op的输出
# 整个执行是自动化的,会话负责传递op所需的全部输入,op通常是并发执行的
# 返回值result是一个numpy‘ndarray’对象
result = sess.run(product)
print(result)
#[[12.]] sess.close()#任务完成关闭对话

另外也可以使用with语句来自动完成关闭操作

 with tf.Session() as sess:
  result = sess.run([product])
  print(result)

这样的输出为[array([[12.]], dtype=float32)]

在具体实现上,tensorf将图形定义转换为分布式执行的操作,以充分利用可以利用的系统资源(CPU,GPU等)。一般不需要显示指定使用CPU或GPU,TensorFlow在检测到GPU后悔尽可能利用找到的第一个GPU来进行操作。

如果机器上有多块GPU,除第一块以外其他的GPU默认是不工作的。如果想把它们利用起来,需要将op明确的指派给它们执行:

  with tf.Session() as sess:

    with tf.device("/gpu:1"):

      matrix1 = tf.constant([[3., 3.]])

      matrix2 = tf.constant([[2.],[2.]])

      product = tf.matmul(matrix1, matrix2)

      .....

设备号用字符串标示。支持的设备包括:

‘/cpu:0’:机器的CPU

'/gpu:0'机器的第一个GPU,如果有的话

‘/gpu:1’第二块GPU 以此类推

交互式使用

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

#!/usr/bin/env python

import os
os.environ['TF_CPP_MIN_LOG+LEVEL'] = '2'
import tensorflow as tf # 进入一个交互式会话
sess = tf.InteractiveSession() x = tf.Variable([1.0,2.0])
a = tf.constant([3.0,3.0]) # 使用初始化其initializer op 的run()方法来初始化‘x''
x.initializer.run() sub = tf.subtract(x,a)
print(sub.eval())

Tensor

tensor数据结构用来代表所有格的数据,计算图中,操作间传递的数据都是tensor,你可以把他看做一个n维的数组或列表,一个tensor包含一个静态类型rank,和一个shape

变量Variable

变量维护图执行过程中 的状态信息。下面的例子将展示如何使用变量来生成一个简单的计数器

#!/usr/bin/env python

import os
os.environ['TF_CPP_MIN_LOG+LEVEL'] = '2'
import tensorflow as tf # 创建一个变量,初始化为0
state = tf.Variable(0,name='counter') # 创建一个op,其作用是使state增加1
one = tf.constant(1)
new_value = tf.add(state,one)
update = tf.assign(state,new_value) # 启动图后,变量必须先经过'初始化'op 初始化
init_op = tf.initialize_all_variables() # 启动图,运行op
with tf.Session() as sess:
# 运行init op
sess.run(init_op) # 打印‘state’的初始值
print(sess.run(state)) # 运行op,更新state,并打印state
for _ in range(3):
sess.run(update)
print(sess.run(state))

代码assign()和add()一样,在调用run()执行表达式之前,它并不会真正的执行赋值操作

通常会将一个统计模型中的参数表示为一组变量,例如,可以把一个神经网络的权重作为某个变量存储在tensor中。在训练过程中,通过重复的运行训练图来更新这个tensor

Fetch

为了取回操作的输出内容,可以在Session对象run()的调用执行图时,传入一些tensor,这些tensor会帮你取回结果。在之前的例子中,我们只取回了单个节点state,但是也可以取回多个tensor:

#!/usr/bin/env python

import os
os.environ['TF_CPP_MIN_LOG+LEVEL'] = '2'
import tensorflow as tf input1 = 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)

Feed

上述实例在计算图中引入了tensor,以常量或变量形式存储。TensorFlow还提供了feed机制,该机制可以临时替代图中任意操作中的tensor可以对图中任何操作提交补丁,直接插入一个tensor。

feed使用一个tensor值临时替换一个操作的输出结果。你可以提供feed数据作为run()调用的参数。feed只在调用它的方法内有效,方法结束,feed就会消失。最常见的用例是建构写特殊的操作指定为feed操作,标记的方法是使用tf.palceholder()为这些操作创建占位符

#!/usr/bin/env python

import os
os.environ['TF_CPP_MIN_LOG+LEVEL'] = '2'
import tensorflow as tf input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32) output = tf.multiply(input1,input2) with tf.Session() as sess:
print(sess.run([output],feed_dict={input1:[7.],input2:[2.]}))

最后一步中,如果没有正确提供feed,placeholder将会报错

TensorFlow 学习(2)——正式起步的更多相关文章

  1. TensorFlow学习路径【转】

    作者:黄璞链接:https://www.zhihu.com/question/41667903/answer/109611087来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  2. TensorFlow学习线路

    如何高效的学习 TensorFlow 代码? 或者如何掌握TensorFlow,应用到任何领域? 作者:黄璞链接:https://www.zhihu.com/question/41667903/ans ...

  3. TensorFlow学习笔记(一)--windows系统安装配置

    1.关于Tensorflow 国际惯例,先来个总体的简要介绍,摘自一个很强大的TensorFlow中文学习网站(http://www.tensorfly.cn/)的简介 TensorFlow™ 是一个 ...

  4. Tensorflow学习笔记2:About Session, Graph, Operation and Tensor

    简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...

  5. 用tensorflow学习贝叶斯个性化排序(BPR)

    在贝叶斯个性化排序(BPR)算法小结中,我们对贝叶斯个性化排序(Bayesian Personalized Ranking, 以下简称BPR)的原理做了讨论,本文我们将从实践的角度来使用BPR做一个简 ...

  6. Tensorflow学习笔记2019.01.22

    tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...

  7. Tensorflow学习笔记2019.01.03

    tensorflow学习笔记: 3.2 Tensorflow中定义数据流图 张量知识矩阵的一个超集. 超集:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S ...

  8. TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]

    I optimizer.minimize(loss, var_list) 我们都知道,TensorFlow为我们提供了丰富的优化函数,例如GradientDescentOptimizer.这个方法会自 ...

  9. tensorflow学习资料

    tensorflow学习资料 http://www.soku.com/search_video/q_tensorflow?f=1&kb=04112020yv41000__&_rp=1a ...

  10. 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识

    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...

随机推荐

  1. JAVA 分布式

    什么是分布式系统? 要理解分布式系统,主要需要明白一下2个方面: 1.分布式系统一定是由多个节点组成的系统. 其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的. 2.这些连通的节点 ...

  2. innodb存储引擎之内存

    1.innoDB存储引擎体系架构 如上图所示,innoDB存储是基于磁盘存储的,并且其中的记录以页的方式进行管理,但为什么要引入一个内存池呢? 其目的就是为了协调CUP速度与磁盘速度的鸿沟,基于磁盘的 ...

  3. Arm汇编指令集2

    什么是协处理器: SoC内部另一处理核心,协助CPU实现某些功能,被主CPU调用执行一定任务. ARM设计上支持16个协处理器,但是一般SoC只实现其中的CP15(cp就是cooperation pr ...

  4. css 模块化

    什么是css模块化思想?(what) 为了理解css模块化思想,我们首先了解下,什么是模块化,在百度百科上的解释是,在系统的结构中,模块是可组合.分解和更换的单元.模块化是一种处理复杂系统分解成为更好 ...

  5. QTP(14)

    练习1.Flight4a 要求: a.录制Flight4a登录+退出业务流程 b.使用自定义检查结合Exist属性验证登录是否成功 c.为用户名实现参数化 用户名 Jack 正确 Rose 正确 12 ...

  6. P2664 树上颜色统计 点分治 虚树 树上差分 树上莫队

    树上差分O(n)的做法 考虑每种颜色对每个点的贡献,如果对于每种颜色我们把当前颜色的点删除,那么原来的树就会分成几个子树,对于一个点,当前颜色在和他同子树的点的点对路径上是不会出现的.考虑到有多种颜色 ...

  7. zeus部署

    1.下载zeus 阿里在github上已经不维护zeus了,在网上找到一个别人贡献的 https://github.com/michael8335/zeus2 下载下来 通过shell rz命令上传到 ...

  8. Web Api(4)

    参考原文链接https://www.cnblogs.com/JamelAr/,本文大部分内容是根据这位博主进行实验测试的,非常感谢分享,另外也参考了https://www.cnblogs.com/vi ...

  9. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid continuation byte

    用pandas打开csv文件可能会出现这种情况,原因可能是excel自己新建一个*.csv文件时候容易出错.进入文件另存为,然后选择csv文件即可.

  10. Spring的BeanPostProcessor和BeanFactoryPostProcessor区别

    Spring提供了两种后处理bean的扩展接口,分别为BeanPostProcessor和BeanFactoryPostProcessor,这两者在使用上是有所区别的. BeanPostProcess ...