使用TensorFlow低级别的API进行编程
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看一下这个图的结构: