tensorflow之tf.placeholder 与 tf.Variable区别对比

二者的主要区别在于

Variable:主要是用于训练变量(trainable variables)之类的。比如我们经常使用的网络权重,偏置。 
值得注意的是Variable在声明是必须赋予初始值。在训练过程中该值很可能会进行不断的加减操作变化。 
名称的真实含义,在于变量,也即在真实训练时,其值是会改变的,自然事先需要指定初始值;
 

weights = tf.Variable(
    tf.truncated_normal([IMAGE_PIXELS, hidden1_units],
            stddev=1./math.sqrt(float(IMAGE_PIXELS)), name='weights')
)
biases = tf.Variable(tf.zeros([hidden1_units]), name='biases')
  • 声明时,若设定参数trainable=False,那么参数不会被改变,默认trainable=True;

placeholder: 用于得到传递进来的真实的训练样本

此函数可以理解为形参,用于定义过程,在执行的时候再赋具体的值

  • 不必指定初始值,可在运行时,通过 Session.run 的函数的 feed_dict 参数指定;
  • 也是用于存储数据,但是主要用于feed_dict的配合,接收输入数据用于训练模型等。placeholder值在训练过程中会不断地被赋予新的值,用于批训练,基本上其值是不会轻易进行加减操作。

placeholder在命名时是不会需要赋予值得,其被赋予值得时间实在feed_dict时。其命名的原因所在,仅仅作为一种占位符;

tf.placeholder(dtype, shape=None, name=None)

此函数可以理解为形参,用于定义过程,在执行的时候再赋具体的值

参数: 
dtype:数据类型。常用的是tf.float32,tf.float64等数值类型 
shape:数据形状。默认是None,就是一维值,也可以是多维,比如[2,3], [None, 3]表示列是3,行不定 
name:名称。 

images_placeholder = tf.placeholder(tf.float32, shape=[batch_size, IMAGE_PIXELS])
labels_placeholder = tf.placeholder(tf.int32, shape=[batch_size])

猜你喜欢

转载自blog.csdn.net/qq_41295976/article/details/85684618