人工智能tensorflow自学之路(2)!
在上一篇文章中,我们用tensorflow做了一次矩阵乘法运算。这次我们要尝试使用变量,在开始之前,小编觉得有必要讲一下tensorflow的运行流程。
下面是引用cnblogs中的一篇文章内容:
tensorflow的运行流程主要有2步,分别是构造模型和训练。
在构造模型阶段,我们需要构建一个图(Graph)来描述我们的模型。所谓图,也可以理解为流程图,就是将数据的输入->中间处理->输出的过程表示出来,就像下面这样。
当然入门Python没有好的学习资料怎么行呢?所以小编这里准备了一份Python学习资料,添加小编学习交流群943752371即可。
注意此时是不会发生实际运算的。而在模型构建完毕以后,会进入训练步骤。此时才会有实际的数据输入,梯度计算等操作。就像上一篇文章中,我们定义了两个变量,虽然各自都传入了数据,但是在定义的时候他们都还是抽象的数据,直到在会话 session中被执行了训练,他们才真正意义上有了实际数据。
下面我们就开始说本次的重点——变量
还是老规矩先引入tensorflow库
importtensorflowastf# 定义一个变量和常量x = tf.Variable([1,2])# 1a = tf.constant([3,3])# 执行减法运算sub = tf.subtract(x, a)# 2# 执行加法运算add = tf.add(x, sub)# 3# 变量要初始化init = tf.global_variables_initializer()# 4withtf.Session()assess:# 初始化变量sess.run(init)# 5print(sess.run(sub)) print(sess.run(add))
1,我们定义了一个变量和一个常量,两个看起来也差不多嘛,继续
2,我们执行了减法运算,并传入了 x和a 作为参数
3,执行了加法运算
4,我们初始化了全局的变量,tensorflow中要求我们在使用变量的时候要初始化
5,我们 sess.run(init) 来执行初始化
最后我们看一下结果:
[-2 -1]
[-1 1]
我们先执行减法运算,把返回的矩阵赋值给sub,最后又和x执行了一次加法运算
注意
我们可以这样理解:在tensorflow中,所有的运算在会话中执行,在此之前都可以理解为定义了一个模型。
下面新建一个文件:
我们定义了一个变量 state ,初值为0, 然后是一次加法运算,把state的值加1后的结果返回给了 new_value,使用tf.assign(state, new_value)方法把new_value的值赋给了 state。其余的都和上面提到的一样了,先打印了一次state的初值,当然是0了。后来我们写了个循环, 反复执行5次 sess.run(update),并打印stata的值。
下面是输出结果:
0
1
2
3
4
5
需要注意的是,tensorflow中变量与变量之间不能直接赋值, 需要用tf.assign()方法。
总结:我们知道了如何去使用变量,和常量不一样的是,变量要初始化,变量之间的赋值要用tf.assign()来间接操作,至于为什么,会报错吗?显然不是,这里给个提示,尝试把 update = tf.assign(state, new_value)注释掉,用 state = new_value来代替,看一下运行结果,当然倒数第二行的sess.run(update)也要注释了。下篇文章我们会构建一个简单的线性函数,并用梯度下降法来学习它!