为了综合梯度下降算法和随机梯度下降算法的优缺点,在实际应用中一般采用这两种算法的折中(每次计算一小部分训练数据的损失函数),这一小部分数据被称为一个batch。通过矩阵运算,每次在一个batch上优化神经网络的参数并不会比单个数据慢太多。另一方面,每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛的结果更加接近梯度下降的效果。以下代码给出了在TensorFlow中如何实现神经网络的训练过程。本书所有的样例中,神经网络的训练大致遵循以下过程。
import tensorflow as tf from numpy.random import RandomState batch_size = n #每次读取一部分数据作为当前的训练数据来执行反向传播算法 x = tf.placeholder(tf.float32, shape=(batch_size, 2), name='x-input') y_ = tf.placeholder(tf.float32, shape=(batch_size, 1), name='y-input') #定义神经网络结构和优化算法 loss = .. train_step = tf.train.AdamOptimizer(0.001).minimize(loss) #训练神经网络. with tf.Session() as sess: #参数初始化。 ... # 迭代的更新参数 for i in range(STEPS): #准备batch_size个训练数据。一般将所有的训练数据随机打乱之后再选取可以得到的更好的优化效果。 current_X, current_y -... sess.run(train_step, feed_dict={x: current_X, y_: current_Y})