Tensorflow首先要定义神经网络的结构,然后再把数据放入结构当中进行运算和训练。
我们要做得就是要建立一个这样的结构,然后把数据放进去,之后tensorflow就可以自己运行,tensorflow字面意思翻译过来就是向量在里面飞。
上图就是一个循环,从输入层输入数据,数据飞到隐藏层再到输出层,用梯度下降法处理,完成对几个参数的更新,用更新之后的参数再次应用到隐藏层中去学习,不停的循环直至结果收敛。
TensorFlow是采用数据流图(data flow graphs)来计算,所以首先我们得创建一个数据流流图,然后再将我们的数据(数据以张量(tensor)的形式存在)放在数据流图中计算。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。训练模型时tensor会不断的从数据流图中的一个节点flow到另一节点,这就是TensorFlow名字的由来。
例子
import tensorflow as tf
import numpy as np # 科学计算的模块
# create data
x_data = np.random.rand(100).astype(np.float32) # 随机生成100个数,定制成float32的形式
y_data = x_data*0.1 + 0.3
### create tensorflow structure start ###
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) # 随机定义一个初始序列,是一维变量,取值在-1到1之间
biases = tf.Variable(tf.zeros([1])) # 初始为0
y = Weights*x_data + biases # 预测的y
loss = tf.reduce_mean(tf.square(y-y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5) # 优化器 用来减少误差 0.5是学习效率 一般是小于1的数
train = optimizer.minimize(loss) # 用优化器减小误差
init = tf.initialize_all_variables() # 初始化
### create tensorflow structure end ###
sess = tf.Session() # session像一个指针,指向要处理的地方
# tf.initialize_all_variables() no long valid from
# 2017-03-02 if using tensorflow >= 0.12
if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:
init = tf.initialize_all_variables()
else:
init = tf.global_variables_initializer()
sess.run(init) # Very important 激活init 相当于一个session的指针
for step in range(201): # 训练201步
sess.run(train) # 要训练train,也就是optimizer
if step % 20 == 0:
print(step, sess.run(Weights), sess.run(biases)) # 每20步打印一个结果,sess.run指向w和b并输出
结果
0 [ 0.22812711] [ 0.30664828]
20 [ 0.124109] [ 0.28806746]
40 [ 0.10579662] [ 0.29713103]
60 [ 0.10139372] [ 0.29931021]
80 [ 0.10033511] [ 0.29983416]
100 [ 0.10008058] [ 0.29996014]
120 [ 0.10001939] [ 0.29999042]
140 [ 0.10000466] [ 0.29999772]
160 [ 0.10000113] [ 0.29999945]
180 [ 0.10000028] [ 0.29999986]
200 [ 0.10000011] [ 0.29999995]