Tensorflow深度学习实战之(四)--变量的管理以及数据的注入到计算图模型图中


一、变量管理

  1. tf.Variable() 来创建变量方法见变量的定义
  2. tf.get_variable() 来获取变量方法见初始化常量获取变量
  3. tf.placeholder() 使用占位符创建变量,但是占位符没用初始值,它只会分配必要的内存,其值是在会话中由用户在调用run方法传递的。

tf.placeholder(dtype, shape=None, name=None), 用来创建一个指定形状的占位符,是张量的一种特殊形式,其参数含义如下:
dtype:必填,数据类型默认为value的数据类型
shape:选填,数据形状默认时None,就是一维值也可以是多维,比如[2, 3], [None, 3]表示列是3,行不定
name:选填,占位符名,默认值不重复

import tensorflow as tf
v1 = tf.placeholder(tf.float32, shape=(2,3), name='v1')
v2 = tf.placeholder(tf.float32, shape=(None,3,4), name='v2')
print(v1.shape)
print(v2.shape)

输出结果为:

(2, 3)
(?, 3, 4)
  1. tf.variable_scope() 用来指定变量的作用域,可以让不同作用域的变量有相同的命名,并在会话中使用 tf.get_variable()获取变量和tf.Variable()创建的变量,该函数还可以使用属性 resuse=True 表示使用已经定义过的变量,这是 tf.get_variable() 不会创建新的变量而是直接获取已经创建的变量。

创建三个作用域,前两个作用域通过 tf.get_variable() 获取两个名称一致的变量,第三个作用域使用 reuse=True 属性重用第二个作用域变量,并在Session中输出,其程序编写如下:

import tensorflow as tf
with tf.variable_scope('v1'):
 a1 = tf.get_variable(name='a1', initializer=tf.constant(1))
with tf.variable_scope('v2'):
 a2 = tf.get_variable(name='a1', initializer=tf.constant(1))
with tf.variable_scope('v2', reuse=True):
 a3 = tf.get_variable('a1',dtype=tf.int32) 
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
 sess.run(init_op)
 print(a1.name)
 print(a2.name)
 print(a3.name)

输出结果为:

v1/a1:0
v2/a1:0
v2/a1:0
  1. tf.name_scope() 具有命名空间管理的功能,给几个变量包一层名字方便变量管理,就像操作系统文件夹命名一样,不同的顶层文件夹下可以有同名文件,在其下会话中使用 tf.get_variable()获取变量和tf.Variable()创建的变量

tf.name_scope(name, default_name=None, values=None), 用来创建一个命名空间,其参数含义如下:
name:命名空间的名字
default_name:如果name参数为None,则使用默认的名称
value:传递给op函数的张量参数列表

import tensorflow as tf
with tf.name_scope("first"):
 a1 = tf.Variable(name="weights", [1.0, 2.0])
with tf.name_scope("second"):
 a2 = tf.Variable(name="weights",[3,.0, 4,0])
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
 sess.run(init_op)
 print(a1.name)
 print(a2.name)

输出结果为:

first/weights:0
second/weights:0

二、将数据注入到张量中

Tensorflow的数据供给机制允许你在计算图中将数据注入到任意张量中,首先需要设置placeholder 节点,然后通过run() 函数输入feed_dict 参数中,注入方法的使用如下程序所示:

printf()中的 %i 是指定整数的格式说明符,说明要存储哪种类型的数据以及要打印哪种类型的数据,

import tensorflow as tf
a = tf.placeholder(dtype=tf.int16) #声明整型张量
b = tf.placeholder(dtype=tf.int16) 
add = tf.add(a,b)
mul = tf.multiply(a,b)
with tf.Session() as sess:
 print("相加:%i"%sess.run(add, feed_dict={a:3,b:4})) #将a,b的值喂入到模型中
 print("相乘:%i"%sess.run(mul, feed_dict={a:3,b:4}))

输出结果为:

相加:7
相乘:12

总结

只要当变量指定确定的数值时在程序运行时需要进行全局初始化,当用类型占位符来创建张量没有初始值的方法时则不需要进行变量的全局初始化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值