TensorFlow学习笔记2:训练

框架的作用就是为了帮助我们减少一些模式化的工作。而TensorFlow在神经网络训练上的一大作用就是可以帮助我们实现Back Propagation过程。如果对神经网络有所了解就会知道,BP简单的来说就是一个链式求导的过程,每次去手动推导计算式是一件很麻烦的事情。但是,有了TensorFlow就可以做到只实现一个正向传播的过程,反向传播过程由框架自动实现。
TensorFlow提供了各种各样的优化器(optimizer)。下面就用一个简单的例子来进行说明。

实例

在这个简单的实例中,我们想要实现一个线性回归(linear regression)。

import tensorflow as tf

# 模型参数
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
# 模型的输入和输出
x = tf.placeholder(tf.float32)
linear_model = W*x + b
y = tf.placeholder(tf.float32)

# 代价函数
loss = tf.reduce_sum(tf.square(linear_model - y)) # 这里使用了均方误差
# 梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)

# 训练数据
x_train = [1, 2, 3, 4]
y_train = [0, -1, -2, -3]
# 训练循环
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
for i in range(1000):
  sess.run(train, {x: x_train, y: y_train})

# 评估模型的精确度
curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train})
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))

运行这段代码之后,会得到结果

W: [-0.9999969] b: [ 0.99999082] loss: 5.69997e-11

可以看出,只需要定义出代价函数,然后扔给优化器,框架就能够自动完成剩下的工作。

标签: none

添加新评论