tf基础操作
基本使用
- 图(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
- 上一篇: php程序开发之实现网页跳转的三种方式
- 下一篇: Discuz修改登录后跳转页面