在最近的学习过程中,在了解了常数和变量中的简单不同,我尝试了几个小的语句,这样可以帮助我们仔细分析一下这两者的用法区别:
vari = tf.Variable(2,name='vari') ####1
cons = tf.constant(3) ####2
Mul = tf.multiply(vari,cons) ####3
Answer = tf.assign(vari,Mul) ####4
init = tf.global_variables_initializer() ####5
with tf.Session() as sess:
sess.run(init)
for i in range(5):
sess.run(Answer)
print(sess.run(Answer))
在上面的语句中,#1首先定义了变量vari,我们定义的初始值为2,笔者尝试了一下,tf.Varible是不可以赋空值的,并定义了一个名称(可以不同)。
#2中定义了常量cons,为3,这个我们在上一讲中阐述过。#3定义了新的计算 Mul = vari*cons ,由于需要持续的变化以查看输出,我们不妨把Mul的值送入vari,让这个函数可以持续的迭代下去。
在#4中,会将assign中后面的内容赋值给前面的量。完成值的传递。由于变量定义后,流动起来需要进行一步初始化的声明,故采用#5语句进行初始化,老版本的语句tf.initialize_all_variables将会在未来进行移除,目前采用global的形式更加好一些。
在session会话中,与第一篇文章有所不同的是,需要对init初始化语句进行run,才可以使得整个模型流动起来,运算后的结果为:
18
162
1458
13122
118098
然而在正常的数据分析过程中,有些变量我们不方便一上来就定义参数,而且在调整参数修改代码的时候,我们更希望能够在统一的位置进行修改,所以placeholder应运而生,它可以帮助我们有效的解决上述两个难题。代码如下所示:
import tensorflow as tf
var_1 = tf.placeholder(tf.float32,[2,2])
var_2 = tf.placeholder(tf.float32,[2,2])
Mul_1 = tf.multiply(var_1,var_2)
Mul_2 = tf.matmul(var_1,var_2)
with tf.Session() as sess:
print(sess.run(Mul_1,feed_dict={var_1:[[2,3],[1,4]],var_2:[[-1,2],[2,3]]}))
print(sess.run(Mul_2,feed_dict={var_1:[[2,3],[1,4]],var_2:[[-1,2],[2,3]]}))
首先我们定义两个2*2的矩阵分别命名为var_1,var_2,这两个矩阵分别执行按位相乘以及矩阵之间的相乘操作。
在Session中,对于每一个待输出的变量,我们都会在feed_dict中赋上一定的值,这类似于Python中的字典操作,方便了我们队变量的赋值应用。输出结果如下:
[[ -2. 6.]
[ 2. 12.]]
[[ 4. 13.]
[ 7. 14.]]