tensorflow 基本使用

目录

tensorflow 基本使用

综述:

计算图:

构建图:

在一个会话中启动图:

'启动默认图'

'任务完成,关闭会话'

交互使用:

Tensor:

变量:

Fetch

Feed


 

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 or GPU设备上面进行计算,同时提供执行op的方法。 这些方法执行后,将产生的tensor返回。python中返回的tensor是numpy ndarray的对象;

      

计算图:

       程序 被组织为 构建阶段 和 执行阶段。构建阶段:op的执行步骤描述为一个图;执行阶段:使用会话执行图中的op。

       如:通常在构建阶段创建一个图来表示和训练神经网络,而在执行阶段反复执行图中的训练op。

      

       tensorflow支持C,C++,Python编程语言。目前python库更加易用,提供了大量的辅助函数简化构建图的工作,这些函数还没有被C,C++库支持

      

       3种语言的会话库(session libraries)一致的

构建图:

       第一步,创建源op(source op),不需要任何输入,例如常量(Constant),源op的输出被传递给其他op做运算

       第二步:其他op以上一步op的返回值/输出值 作为输入

       python库里面有一个默认图,op构造器可以为其增加节点,这个默认图对很多程序来讲已经够用,阅读graph类文档,了解如何管理多个图

              import tensorflow as tf

 

       #创建一个常量op,产生一个1x2矩阵,这个op被作为一个节点

       #加到默认图中

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

       '注意,必须是[[3.,3.]],要有两个[[]]'

       #创建另外一个常量op,产生一个2x1矩阵

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

 

       #创建矩阵乘法 matmul op,将matrix1 and matrix2 作为输入

       #返回值 ‘product’代表矩阵乘法的结果

       product=tf.matmul(matrix1,matrix2)

 

       #默认图现在有3个节点,两个constant op,1个

      

在一个会话中启动图:

构造阶段完成后,才能启动图。第一个步骤,创建一个Session对象,如果没有任何创建参数,会话构造器将启动默认图。

 

'启动默认图'

sess=tf.Session()

'''

调用sess的run()方法执行矩阵乘法op,传入‘product’作为该方法的的参数

product 代表了 矩阵乘法op的输出,传入‘product’是 向方法表明,希望取出矩阵乘法op的输出

 

整个执行过程全自动化,会话负责传递op需要的所有输入,op通常是并发执行

函数调用 run(product) 出发了图中的3个op (两个常量op,一个矩阵乘法op)的执行

 

返回值 ‘result’ 是一个numpy ndarray对象

'''

result=sess.run(product)

print(result)

'任务完成,关闭会话'

sess.close()

#%%

'Session对象在使用完成后需要关闭 以释放资源。  输了显式调用close以外,还可以使用with模块代码自动完成关闭动作'

with tf.Session() as sess:

    result=sess.run(product)

    print(result)

实现上,tensorflow将图形定义转换为分布式执行的操作,充分利用CPU or GPU计算资源,一般不需用显式指定CPU或者GPU,tensorflow可以自动检测,如果检测到GPU,tensorflow会尽可能利用找到的第一个GPU来执行操作。

如果有多个GPU,默认只有第一个GPU在工作,其他GPU默认都不工作,

如果要让其他GPU工作,必须要将op明确指派给他们执行, …with ..Device …语句来指派特定的CPU或者GPU

'无法运行,不明白为什么'

with tf.Session() as sess:

    with tf.device('/gpu:0'):

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

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

        product=tf.matmul(matrix1,matrix2)

        result=sess.run(product)

        print(result)

设备用字符串进行标识,目前支持的设备包括:

“/cpu:0”

“/gpu:0”

“/gpu:1”

 

交互使用:

为了便于使用ipython之类的交互环境,可以使用InterativeSession 代替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])

 

'使用初始化器 initalizer op 的run()方法,初始化x'

x.initializer.run()

 

#增加一个减法操作 sub op,从x减去a,运行减法op,输出结果

sub=tf.subtract(x,a)

print(sub.eval())

       

 

Tensor:

tensorflow 程序使用tensor数据结构来代表所有数据,计算图中,操作间的传递数据都是tensor,你可以把tensorflow看作一个n维的数组或者列表,一个tensor包含一个静态类型rank,一个shape,要了解这些参见Rank,shape,Type。

 

变量:

variables。 变量 维护图执行过程中的状态信息。下面的例子演示了如何通过使用变量来实现一个简单的计数器。参见变量章节了解更多细节。

'创建一个变量,初始化为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)

 

'''

启动图后,变量必须经过初始化(init)op初始化

首先必须增加一个 初始化 op 到图里面

'''

       

init_op=tf.global_variables_initializer()

with tf.Session() as sess:

    '运行 ‘init’ op'

    sess.run(init_op)

    print(sess.run(state))

   

    for _ in range(3):

        sess.run(update)

        print(sess.run(state))

 

 

Fetch

 

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

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

 

# 输出:

# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]

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

 

Feed

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

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

 

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.0],input2:[2.0]}))

# 输出:

# [array([ 14.], dtype=float32)]

 

for a larger-scale example of feeds. 如果没有正确提供 feed, placeholder() 操作将会产生错误MNIST 全连通 feed 教程 (source code) 给出了一个更大规模的使用 feed 的例子.

 

 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值