学习率:控制参数更新的速度。
学习率过小会大大增加优化的时间学习不能过大也不能过小
tensorflow 使用tf.train.exponential_decay函数实现指数衰减法设定学习率
使用这个函数可以先使用大的学习率来得到最优解
learning_rate初始学习率 decay_rate衰减系数 decay_steps 衰减次数
过拟合问题:
为了克服过拟合问题使用正则化,正则化的思想就是在损失函数中加入刻画模型复杂程度的指标
两种正则方式,L1正则化和L2正则化
带L2正则化的损失函数
下图中tf.contrib.layers.11/12_regularizer(lambda)(w)计算正则化的值
lambda正则化项的权重,w需要计算正则化损失的参数
但是当网络层数增加时,正则化的计算很复杂,可读性很差
可以通过集合,计算复杂网络的带正则化的损失函数
滑动平均模型:
在使用随机梯度下降算法中,使用滑动平均模型可以提高最终模型在测试数据上的表现
TesorFLOW 使用tf.train.ExponentialMovingAverage来实现滑动平均模型
在这个函数中,decay衰减率,控制模型更新的速度,
MNIST
将图片转换为一维数组 ,用像素点的深浅表示 1和0
为了方便额使用随机梯度下降算法
input_data.read_data_sets()函数生成的类提供了mnist .train.next_batch函数,从所有训练的数据集中提取一小部分作为训练的batch
对于mnist实验4000轮后,模型在验证数据集上出现波动,说明已经接近了极小值了
开始对一些特征值进行设定
LEARNING_RATE_BASE = 0.8 # 基础的学习率
LEARNING_RATE_DECAY = 0.99 # 学习率的衰减率
REGULARIZATION_RATE = 0.0001 # 描述模型复杂度的正则化项在损失函数中的系数
TRAINING_STEPS = 20000 # 训练轮数
MOVING_AVERAGE_DECAY = 0.99 #滑动平均衰减率
一般采用验证数据集来评测模型的效果
对比模型在验证数据集和测试数据集的正确率
在mnist中可以通过,验证数据集判断一个模型的优劣
相比滑动平均与指数衰减的学习率,正则化加入损失函数对于会对模型带来更大的提升
优化交叉熵和正则化的和对于模型更为有利
可以将神经网络的向前传播定义在一个函数
def inference(input_tensor, avg_class, weights1, biases1, weights2, biases2):
对于tf,get_variable()变量名是必填项,根据变量名去创建和获取变量
TensorFlow模型持久化