变量和占位符

曾经因为一些工作的原因问过很多人知不知道变量和占位符的区别,但是能答上来的几乎很少,其实区别很简单:

变量是TensorFlow机器学习算法的参数,TensorFlow通过维护和调整这些变量的状态来优化机器学习算法。

占位符是TensorFlow对象,用于表示输入输出数据的格式,允许传入指定类型和形状的数据,并依赖计算图的计算结果。(如:期望等)

变量

在TensorFlow中,tf.Variable()函数创建变量,过程是输入一个张量,返回一个变量。声明变量后需要初始化变量。


  
  
  1. my_var = tf.Variable(tf.zeros([ 2, 3]))
  2. sess = tf.Session()
  3. initialize_op = tf.global_variable_initializer()
  4. sess.run(initialize_op)

在TensorFlow中每个变量都有initializer方法,一般都会使用全局初始化变量即tf.golbal_variable_initializer(),这样会一次性初始化所有的变量。但是,如果是基于已经初始化的变量进行初始化,则必须按序进行初始化。


  
  
  1. sess = tf.Session()
  2. first_var = tf.Variable(tf.zeros[ 2, 3])
  3. sess.run(first_var.initializer)
  4. second_var = tf.Variable(tf.zeros_like(first_var))
  5. sess.run(second_var.initializer)

注:因为第二个参数是依赖于第一个参数,所以必须先初始化第一个参数再初始化第二个参数。

占位符

占位符仅仅声明数据位置,用于传入数据到计算图。占位符通过会话的feed_dict参数获取数据。在计算图中使用占位符时必须在其上执行至少一个操作。


  
  
  1. sess = tf.Session()
  2. x = tf.placeholder(tf.float32, shape=[ 2, 2])
  3. y = tf.identity(x)
  4. x_val = np.random.rand( 2, 2)
  5. sess.run(y, feed_dict={ x:x_val })

注:tf.identity()返回占位符传入的数据本身;不要写成sess.run(x, feed_dict={x:x_val})

猜你喜欢

转载自blog.csdn.net/monk1992/article/details/89136580
今日推荐