1. 优化器(tensorflow)
1.1 tf.train.GradientDescentOptimizer --梯度下降
表达式:
# 传入学习率,目标优化损失
tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
1.2 tf.train.MomentumOptimizer--动量梯度下降
表达式:
# 优化损失函数
tf.train.MomentumOptimizer(learning_rate).minimize(loss)
1.3 tf.train.AdamOptimizer--自适应学习率变化
表达式:
# 自适应梯度下降
tf.train.AdamOptimizer(learning_rate).minimize(loss)
1.4 总结:
a . tensorflow中的优化器
tf.train.GradientDescentOptimizer --
tf.train.AdadeltaOptimizer --
tf.train.AdagradOptimizer
tf.train.AdagradDAOptimizer
tf.train.MomentumOptimizer --
tf.train.AdamOptimizer --
tf.train.FtrlOptimizer
tf.train.ProximalGradientDescentOptimizer
tf.train.ProximalAdagradOptimizer
tf.train.RMSPropOptimizer --
b. 各种优化器对比:
1)标准梯度下降法:
标准梯度下降先计算所有样本汇总误差,然后根据总误差来更新权值
2)随机梯度下降法:
随机梯度下降随机抽取一个样本来计算误差,然后更新权值
3)批量梯度下降法:
批量梯度下降算是一种折中的方案,从总样本中选取一个批次(比如一共有10000个样本,随机选取100个样本作为一个batch),然后计算这个batch的总误差,根据总误差来更新权值。
2. 学习率动态变化
在模型不断学习的过程中,训练后期中模型的表现能力很强,此时应该降低学习率,使得模型能够快速的接近目标。
学习率指数递减:
# 学习率指数递减
learning_rate = tf.train.exponential_decay(learning_rate,global_step,decay_steps,decay_rate)
'''
参数说明:
learning_rate:学习率初始值,默认为0.1
global_step:当前训练轮数,在定义时需要设置为不可训练
decay_steps:批次大小
decay_rate:多少次更新一次学习率(总样本/批次大小)
'''
3. 欠拟合与过拟合
1) 欠拟合
现象:模型不能够捕捉数据的特征,从而不能够准确预测
方法:
① 添加特征项,使得模型拥有更多了解数据的可能性;
② 减少正则化参数,构造复杂模型来预测结果
2) 过拟合
现象:模型在训练集上拥有非常好的表现,但在预测集上表现不理想;
方法:
① 增加数据集,降低模型的错误率;
② 正则化方法(代价函数增加正则项)
# 为参数w添加L2正则化项,命名为losses
tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
# 计算损失
ce = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.arg_max(y_predict,1)))
# 添加正则化项,构成最终的模型损失
loss = ce + tf.add_n(tf.get_collection('losses'))
③ Dropout(部分神经元工作)
# 在一层网络传播中dropout应用
W1 = tf.Variable(tf.truncated_normal([784,2000],stddev=0.1))
b1 = tf.Variable(tf.zeros([2000])+0.1)
L1 = tf.nn.tanh(tf.matmul(x,W1)+b1)#激活函数
L1_drop = tf.nn.dropout(L1,keep_prob)
# 注:在训练中使用dropout,但在测试集上必须保证全部的神经元工作,即 keep_prob=1.0