TensorFlow基础:Graph与Variable

本文介绍了TensorFlow中Graph对象的创建与使用方法,并详细解释了Variable对象的创建、初始化、修改及重置过程。此外,还介绍了如何使用placeholder进行数据填充。

tensorflow的Graph对象

在tensorflow库在被加载的时候,它会自动创建一个Graph对象,并把它作为默认的数据流图.
所以在加载库后,就可以在默认图中创建Op,tensor对象.
如果要隔离多个不存在依赖关系的模型时,可以创建多个Graph对象,
# 创建graph的语法很简单
import tensorflow as tf
# 此时有一个默认的Graph对象
# 在默认图中添加一个Op
a = tf.constant(1, name='a')

# 接下来创建一个新的数据流图
# 下面结合with 语句利用Graph.as_default()方法访问上下文管理器
# 为新的数据流图添加Op
g = tf.Graph()
with g.as_default():
    b = tf.constant([1, 2], name='b')

# 在with 之外添加的Op在默认的数据流图中
c = tf.constant([3, 4], name='c')
# 执行默认图中的Op
sess = tf.Session()
sess.run(a)
1
# 执行新图g中的Op
sess1 = tf.Session(graph = g)
sess1.run(b)
array([1, 2], dtype=int32)
# 如果要使用多个数据流图
# 最佳方式是,忽略默认的图
import tensorflow as tf
g1 = tf.Graph()
g2 = tf.Graph()

with g1.as_default():
    # 定义g1中的Op


with g2.as_default():
    # 定义g2中的Op
# 也可以同时使用默认图和新建图
import tensorflow as tf

# 获取默认数据流图的句柄
g1 = tf.get_default_graph()
g2 = tf.Graph()
with g1.as_default():
    # 定义g1中的Op


with g2.as_default():
    # 定义g2中的Op

tensorflow中的变量(Variable)

变量是一种特殊的数据,它在图中有固的位置,机器学习任务的本质决定了需要一种机制保存随时间变化的值.variable通过tf.Variable()方法构造

# variable对象传入的初始值,决定了这个变量的形状和类型
var = tf.Variable(3, name='variable')
# 在tensorflow的函数中和Op中都可以使用variable
a = tf.add(4, var)
b = tf.mul(3, var)
#Variable对象的初值通常是全0/1的高阶张量,tensorflow中有很多辅助函数来创建高阶张量
# 2x2 全零矩阵
zeros = tf.zeros([2, 2])

# 为1的向量
ones = tf.ones([6])

# 3x3x3张量,服从0~10的均匀分布
uniform = tf.random_uniform([3,3,3], minval=0, maxval=10)

# 服从0均值,标准差为2的正太分布
normal = tf.random_normal([3,3,3], mean=0, stddev=2.0)

# tf.truncated_mormal()返回值不会偏离均值两倍的标准差
# 返回的值不会有小于3.0或者大于7.0的
trunc = tf.truncated_normal([2,2], mean=5.0, stddev=1.0)

# 默认均值为0,标准差为1.0
random_var = tf.Variable(tf.truncated_normal([2, 2]))

Variable对象的初始化

Variable对象与大多数其他对象在图中存在的方式类似,但是变量的状态由Session对象管理.在使用变量之前需要在一个session对象内对Variable对象进行初始化.这样Session对象会开始追踪这个Variable的值的变化.
init = tf.global_variables_initializer()   # 对图中所有Variable初始化的Op
sess = tf.Session()
sess.run(init)    # 对图中所有的变量进行了初始化

# 也可以单独对个别变量进行初始化
var1 = tf.Variable(0, name='init_1')
init1 = tf.initialize_variables([var1], name='init_var1')
sess.run(init1)

Variable对象的修改

Variable.assign()用来修改变量的,(这个操作会给Variable赋新值),这也是一个Op,在session对象下生效.

# 变量Op
var_5 = tf.Variable(3)

# 创建一个Op来,修改variable的操作,每次执行这个节点,var_5的值都会更新
new_var5 = var_5.assign(var_5 + 3)

# 初始化varibale,创建Op
#init2 = tf.initialize_all_variables()   这个初始化方法在2017年3月去掉了,下面新方法
init2 = tf.global_variables_initializer()
# 初始化variable
sess.run(init2)

# 修改变量var_5
sess.run(new_var5)
6
sess.run(var_5)
6
sess.run(new_var5)
9

Variable对象的自增和自减,也可以通过Variable.assign_add()和.assign_sub()方法实现

sess.run(var_5.assign_add(1))
10
不同的Session对象,只对指定图中的变量的值进行跟踪维护(默认是默认数据流图)

Variable对象的重置,

(也可以再次执行,单独变量初始化,对部分变量重置)

# 再次执行变量初始化操作的Op,就会重置全部变量,恢复初始值
init2 = tf.global_variables_initializer()
sess.run(init2)
sess.run(var_5)
3

Varibale对象中的trainable参数

在训练过程当中,有些变量会被自动修改,如果有些变量不想被修改可设置为手工修改,
在创建变量时,把trainable参数设为False

not_trainable = tf.Variable(0, trainable=False)
TensorFlow中还提供了一种填充机制,在构建图时,使用tf.placeholder()临时替代任意操作的张量
,在调用Session对象的run()方法时,填充数据作为调用参数,调用结束,填充数据消失
x1 = tf.placeholder(tf.float32)
x2 = tf.placeholder(tf.float32)
y = tf.add(x1, x2)
with tf.Session() as sess:
    print sess.run([y], feed_dict={x1:[2.0], x2:[3.0]})
[array([ 5.], dtype=float32)]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值