使用占位符和变量
变量是TensorFlow机器学习算法的参数,TensorFlow调整这些变量的状态来优化机器学习的算法。
占位符是TensorFlow对象,用于表示输入输出数据的格式,允许传入指定类型和形状的数据,并依赖计算机的计算结果。
在TensorFlow中,tf.Variable()函数创建变量,过程是输入一个张量,返回一个变量。声明变量后需要初始化变量。
下面是创建变量并初始化的例子:
my_var = tf.Variable(tf.zeros([2,3]))
sess = tf.Session()
initialize_op = tf.global_variables_intializer()
sess.run(intialize_op)
占位符仅仅声明数据位置,用于传入数据到计算图。占位符通过会话的feed_dict参数获取数据。在计算图中使用占位符时,必须在其上执行至少一个操作。在Tensorflow中,初始化计算图,声明一个占位符x,定义y为x的identity操作。identity操作返回占位符传入数据本身。
结果图,代码如下:
sess = tf.Session()
x = tf.placeholder(tf.float32, shape=[2,2])
y = tf.identity(x)
x_vals = np.random,rand(2,2)
sess.run(y ,feed_dict={x:x_vals})
#Note that sess.tun(x, feed_dict={x:x_vals}) will result in a self-referencing error.
延展学习
在计算图运行的过程中,需要告诉tensorflow初始化创建的变量。tensorflow的每个变量都有initalizer方法,但最常用的方式时helper函数(global_variables_initalizer())。此函数会一次性初始化所创建的所有变量,使用方法如下:
initializer_op = tf.global_variables_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))
#Depends onfirst_var
sess.run(second_var.initializer)