tensorflow入门笔记3:placeholder机制和Variable变量

1.placeholder 机制

  • placeholder 机制的作用

网络的输入数据是一个矩阵,我们把多个这样的矩阵数据打包成一个很大的数据集,如果将这个数据集当作变量或常量一下子输入到网络中,那么就需要定义很多的网络输入常量,于是计算图上将会涌现大量的输入节点。这是不利的,这些节点的利用率很低。
placehoder 机制被设计用来解决这个问题。编程时只需要将数据通过 placeholder 传入 TensorFlow 计算图即可。

  • 使用 tf.placeholder()
import tensorflow as tf
a = tf.placeholder(tf.float32,shape=(2),name="input") 
b = tf.placeholder(tf.float32,shape=(2),name="input")
result = a+b

with tf.Session() as sess :
  sess.run(result,feed_dict={a:[1.0,2.0],b:[3.0,4.0]})
  print(result)
  #输出[4.,6.]

在 placeholder 定义时,这个位置上的数据类型dtype是需要指定且不可以改变的。 placeholder 中数据的维度信息shape可以根据提供的数据推导得出,所以不一定要给出;或者对于不确定的维度,填入None即可。
这里输入ab定义为常量,这里将它们定义为一个tf.placeholder(),在运行会话时需要通过sess.run()函数的feed_dict来提供ab的取值。feed_dict是一个字典dict,在字典中需要给出每个用到的placeholder的取值。

2.Varibale变量

  • tf.Variable()创建变量
tf.Variable(initial_value,
             trainable=True, 
             collections=None, 
             validate_shape=True, 
             name=None)
参数名称 参数类型 含义
initial_value 所有可以转换为Tensor的类型 变量的初始值,一般是随机生成函数的值
trainable bool 是否加入到GraphKeys.TRAINABLE_VARIABLES被迭代优化
collections list 指定该图变量的类型、默认为GraphKeys.GLOBAL_VARIABLES
validate_shape bool 是否进行类型和维度检查
name string 变量的名称,如果没有指定则系统会自动分配一个唯一的值
  • sess对变量运算前初始化所有变量
init = tf.global_variables_initializer()
with tf.Session() as sess:
  sess.run(init)
  • 管理变量的变量空间
with tf.variable_scope("one") :
a = tf.get_variable ("a",shape=[1],initializer=tf.constant_initializer(1.0))
  • 以上代码在名为one的变量空间内创建名字为a的变量;
  • 因为tf.variable_scope("one")的参数默认reuse=False,所以在one这个变量空间内不能在创建名字为a的变量;
  • reuse=Trueget_variable()函数会直接获取name属性相同的己经创建的变量,获取的变量没创建过则会报错(区别于指定initializer时为创建新变量)

你可能感兴趣的:(tensorflow入门笔记3:placeholder机制和Variable变量)