牛骨文教育服务平台(让学习变的简单)
博文笔记

tf基础操作

创建时间:2017-04-19 投稿人: 浏览次数:929

基本使用

  • 图(graph)表示计算任务
  • 会话(session)中执行图
  • 张量(tensor) 表示数据
  • 变量(variable)维护状态
  • feed和fetch 为任意操作赋值或者获取值

综述

在tf中,图表示计算任务。图中节点被称为operation(简称op)。op接受tensor,执行计算,产生tensor。tensor是多维数组。
为了进行计算,图必须在会话里被启动。会话将图的op分发到cpu之类的设备上,同时提供执行op的方法,执行后,返回tensor结果。

计算图

tf程序通常被组织成一个构建阶段和一个执行阶段。
在构建阶段,op的执行步骤被描述成一个图。在执行阶段,使用会话执行图中的op。

构建图

构建图的第一步是创建源op(source op)。源op不需要任何输入,例如常量(constant)。源op的输出传递给其他op做运算。op构造器返回值代表构造出的op的输出,返回值可以传递给其他OP、构造器作为输入。

启动图

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

# -*- coding:gb2312 -*-
import tensorflow as tf
#第一步
#构建图

#创建一个常量op,产生1个1行2列的矩阵,这个op称为1个节点
#加到默认图中
#构造器的返回值就是该op的返回值
matrix1 = tf.constant([[3, 3]])
#创建另一个常量op,产生2x1矩阵
matrix2 = tf.constant([[2],[2]])
#创建一个矩阵乘法matmul op。并将matrix1,matrix2作为输入
#返回值就是乘法op的返回值
product = tf.matmul(matrix1, matrix2)

#第二步
#执行图

#启动默认图
sess = tf.Session()
#调用sess的run方法来执行矩阵乘法op,传入product作为方法的参数
#product代表乘法op的输出,传入它是向run方法表明,我们希望取回矩阵乘法op的输出

#执行过程是自动的,会话负责传递op所需全部输入,op通常是并发执行的
#当函数调用run方法的时候,触发了图中三个op(2常量op,1乘法op)的执行
result = sess.run(product)
print result

#任务完成,关闭会话
sess.close()

tensor

tf中使用tensor数据结构代表所有的数据。计算图中,操作间传递的数据都是tensor。可以把tensor看做是一个n维的数组

变量

variable维护图执行过程中的状态信息。

# -*- coding:gb2312 -*-
import tensorflow as tf
#使用变量实现一个简单的计数器

#创建一个变量,初始化为标量0
state = tf.Variable(0, name="counter")

#创建1个op,其作用是state加1
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)

#启动图后,变量必须经过初始化op
#首先增加一个初始化op到图中

init_op = tf.initialize_all_variables()
#启动图
with tf.Session() as sess:
    #初始化变量op
    sess.run(init_op)
    #打印state初始值
    print sess.run(state)
    #重复执行计数器3次,运行update op
    for _ in range(3):
        r = sess.run(update)
        print r

fetch

为取回操作的输出内容,可以在使用run执行图时,传入一些tensor,在执行op后,tensor会取回返回值结果。在前面例子中,只取回了单个节点state,但是也可以取回多个tensor。

# -*- coding:gb2312 -*-
import tensorflow as tf
x1 = tf.constant(3.0)
x2 = tf.constant(2.0)
x3 = tf.constant(5.0)

intermed = tf.add(x2, x3)
mul = tf.multiply(x1, intermed)
#在run中使用[]获取多个tensor
with tf.Session() as sess:
    result = sess.run([mul,intermed])
    print result

需要获取的多个tensor值在一次op中同时获得,而不是逐个获取tensor

feed

上述示例中在计算图中引入了tensor,以常量或变量形式存储。tf中还提供了feed机制,其可以临时替代图中的任意操作中的tensor,可以对图中任何操作提交补丁,直接诶插入tensor。
feed使用一个tensor的值临时替换一个操作的输出结果。可以提供feed数据作为run调用的参数。
feed只在调用它的方法内有效,方法结束,feed就会消失。

# -*- coding:gb2312 -*-
import tensorflow as tf
#使用placeholder为feed操作创建占位符
x1 = tf.placeholder("float")
x2 = tf.placeholder("float")
y = tf.multiply(x1, x2)

with tf.Session() as sess:
    result = sess.run(y,feed_dict={x1:7,x2:2})
    print result
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。