深度学习(六)--优化

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值