tensorflow的运行流程:构造模型和训练
构造模型阶段:构建一个图表示模型(此过程的模型都是抽象的),即流程图,数据的输入->中间处理->输出的过程
此过程不会发生实际运算。
此阶段涉及到的概念Tensor,Variable,placeholder
训练阶段:实际的数据输入,梯度计算等操作
此阶段涉及到的概念Session
基本概念
1.Tensor就是张量,可以理解为矩阵。
>>>import tensorflow as tf
>>>a=tf.zeros(shape=[1,5])
>>>print a
Tensor("zeros:0",shape=(1, 5), dtype=float32)
在训练开始之前,所有的数据都是抽象的概念。即a只是表示这是一个1*5的0矩阵,而没有实际赋值,也没有分配空间,因此打印出来的如上红色。只有在训练过程开始后,才能获得a的实际值。
>>>sess=tf.InteractiveSession()
>>>sess.run(a)
array([[0., 0., 0., 0., 0.]], dtype=float32)
2.Variable定义变量,其实就是可以修改的张量,可以用于计算输入值,也可以在计算中被修改。一般表示图中的各个计算参数,包括矩阵/向量等。在tensorflow中,得定义变量才是变量,还可以给变量赋值。
例如:y=relu(wx+b),这里w和b都是用来训练的参数,那么这2个可以用Variable表示。
>>>w=tf.Variable(tf.zeros(shape=[1,2]), name=’weight’)
>>>print w
此时w也是抽象的,不过与Tensor不同,Variable必须初始化以后才有具体的值,因此箬出现变量则一定要做初始化。
init= tf.initialize_all_variables()
>>>sess.run(w) 报错
>>>sess.run(tf.initialize_all_variables())
>>>sess.run(w)
array([[0., 0.]], dtype=float32)
3.placeholder叫占位符,也是抽象的概念。主要是给节点输入数据时使用placeholder,在tensorflow中用placeholder来描述等待输入的节点,只需要指定类型即可,然后在执行节点的时候用一个字典来“喂“这些节点。在实际运行时,从外部传入数据,注意placeholder和feed_dict是绑定使用。
用于表示输入输出数据的格式。告诉系统这里是一个值/向量/矩阵,但是现在无法提供具体的值,正式运行的时候会补上。
>>> x=tf.placeholder(tf.float32,[1,5],name='input')表明输入是[1,5]的横向量
>>>y=tf.placeholder(tf.float32,[None,5],name='input')表明输入是[?,5]的矩阵,不确定?的值
>>>print x
Tensor("input:0",shape=(1, 5), dtype=float32)
>>>print y
Tensor("input_1:0",shape=(?, 5), dtype=float32)
with tf.Session() as sess:
print(sess.run(ouput, feed_dict={x: [7.], y: [2.]}))
4.Session即会话。session是抽象模型的实现者。因为模型是抽象的,只有实现了模型以后,才能够得到具体的值。具体的参数训练,预测,甚至变量的实际值查询,都要用到session。
参数值以及损失函数等所有要查询的值都得以Session.run(name)的形式查询。
激活模型之前,得初始化所有变量:init= tf.initialize_all_variables()
定义模型之后,要激活模型结构:sess=tf.Session()
上述2个步骤都没有执行,知道sess.run()之后才会开始执行变量初始化运算:sess.run(init)