曾经因为一些工作的原因问过很多人知不知道变量和占位符的区别,但是能答上来的几乎很少,其实区别很简单:
变量是TensorFlow机器学习算法的参数,TensorFlow通过维护和调整这些变量的状态来优化机器学习算法。
占位符是TensorFlow对象,用于表示输入输出数据的格式,允许传入指定类型和形状的数据,并依赖计算图的计算结果。(如:期望等)
变量
在TensorFlow中,tf.Variable()函数创建变量,过程是输入一个张量,返回一个变量。声明变量后需要初始化变量。
-
my_var = tf.Variable(tf.zeros([
2,
3]))
-
sess = tf.Session()
-
initialize_op = tf.global_variable_initializer()
-
sess.run(initialize_op)
在TensorFlow中每个变量都有initializer方法,一般都会使用全局初始化变量即tf.golbal_variable_initializer(),这样会一次性初始化所有的变量。但是,如果是基于已经初始化的变量进行初始化,则必须按序进行初始化。
-
sess = tf.Session()
-
first_var = tf.Variable(tf.zeros[
2,
3])
-
sess.run(first_var.initializer)
-
second_var = tf.Variable(tf.zeros_like(first_var))
-
sess.run(second_var.initializer)
注:因为第二个参数是依赖于第一个参数,所以必须先初始化第一个参数再初始化第二个参数。
占位符
占位符仅仅声明数据位置,用于传入数据到计算图。占位符通过会话的feed_dict参数获取数据。在计算图中使用占位符时必须在其上执行至少一个操作。
-
sess = tf.Session()
-
x = tf.placeholder(tf.float32, shape=[
2,
2])
-
y = tf.identity(x)
-
x_val = np.random.rand(
2,
2)
-
sess.run(y, feed_dict={ x:x_val })
注:tf.identity()返回占位符传入的数据本身;不要写成sess.run(x, feed_dict={x:x_val})