Tensorflow的低级API要使用张量(Tensor)、图(Graph)、会话(Session)等来进行编程。虽然从一定程度上来看使用低级的API非常的繁重,但是它能够帮助我们更好的理解Tensorflow的,更加灵活的控制训练的过程。程序的构建分为两个步骤,第一个步骤是图的构建,第二个步骤是会话的运行。
Tensorflow中张量和变量
Tensorflow中图包含一系列的节点还有边。这里的节点是各种指令(op),它负责进行张量的计算,边表示的是指令产生的结果,为张量。构建好一张图以后开始运行,图的结构不变,里面的数据不断的流动和更新。其中更新的数据是那些变量。虽然变量属于张量的一种,但是它们还是有很大的不同,可以理解为,张量的值是临时产生的,进行数据运算的时候使用的值,比如在深度学习当中的读入的数据以及计算的结果。而变量的值是我们用来更新的参数,比如W和b等参数。
求解线性模型的参数
import tensorflow as tf
import numpy as np # 构建一些数据
x_true = np.linspace(-1, 1, 100).astype(np.float32)
y_true = 3*x_true + 1 # 定义W和b变量
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name='weights')
biases = tf.Variable(tf.zeros([1]), name='biases') # 计算损失
y_pred = Weights * x_true + biases
loss = tf.reduce_mean(tf.square(y_pred - y_true), name='loss') # 定义优化
optimizer = tf.train.GradientDescentOptimizer(0.1)
train = optimizer.minimize(loss, name='train') init = tf.global_variables_initializer() with tf.Session() as sess:
sess.run(init)
for i in range(100):
sess.run(train)
if i % 10 == 0:
print('Weights', sess.run(Weights), 'biases', sess.run(biases), 'loss', sess.run(loss))
在Session之前都是对于图的构建,Session里面是进行的图的运行。
使用TensorBoard看一下这个图的结构: