源于工作需要,重新学习tensorflow,好久未使用,忘记的差不多了。
tensorflow的基础框架
1 数据准备
2 定义placeholder容器
3 初始化参数权重
4 计算预测结果
5 计算损失函数值
6 初始化optimizer
7 在session里执行graph
tensorflow的基础框架
tensorflow中是由Graph和Session组成,Graph负责将计算架构搭建起来,Session则负责将数据输入、执行模型、产出结果。分工明确,严格分割开来。
其中,Graph和Session过程也可以细分为一下几个部分:
1、 数据准备
这部分是最起始的部分,将数据集从磁盘读取
2、 定义placeholder容器
placeholder
用于存储变量,自变量和因变量。定义如下:
tf.placeholder(dtype, shape=None, name=None)
复制
dtype :定义数据类型;
shape:定义维度;
name:定义名称。
例子:
batch_size = 128
X = tf.placeholder(tf.float32, [batch_size, 784], name='X_placeholder')
Y = tf.placeholder(tf.int32, [batch_size, 10], name='Y_placeholder')
复制
3、 初始化参数/权重
这部分是定义权重变量,模型中涉及到的参数需要提前定义。
w = tf.Variable(<initial-value>, name=<optional-name>)
复制
包含初始化值和命名两部分。
例子:
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
复制
W
和
b
就是定义的参数
更加深入的研究
Variable
请看
Variable帮助文档
4、 计算预测结果
Y_pred = tf.add(tf.multiply(X, W), b)
复制
通过估计的参数来计算预测值
5、 计算损失函数值
为了估计模型的参数,一般通过定义损失来估计。
loss = tf.square(Y - Y_pred, name='loss')
复制
当然,根据自己数据来定义损失函数最为恰当,这里仅仅给出案例。
6、 初始化optimizer
前面的定义了模型的结果,这部做模型求解。常用的求解算法有很多,要结合自己的数据来定义。通过情况下,我们需要提前定义学习率。
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
复制
这里是使用梯度下降法来优化模型,损失函数最小。
7、 在session里执行graph
首先,定义迭代次数或迭代停止条件。
# xs是指输入的数据
n_samples = xs.shape[0]
with tf.Session() as sess:
# 初始化所有变量
sess.run(tf.global_variables_initializer())
# 记录日志
writer = tf.summary.FileWriter('./graphs/linear_reg', sess.graph)
# 训练模型,这里定义训练50次
for i in range(50):
total_loss = 0
for x, y in zip(xs, ys):
# 通过feed_dic把数据灌进去
_, l = sess.run([optimizer, loss], feed_dict={X: x, Y:y})
total_loss += l
if i%5 ==0:
print('Epoch {0}: {1}'.format(i, total_loss/n_samples))