MNIST手写数字识别(二)几种模型优化方式介绍

本文介绍了MNIST手写数字识别模型的优化方法,包括动态衰减学习率以提升模型稳定性,使用正则化防止过拟合,以及通过滑动平均模型增强模型的泛化能力。详细讲解了TensorFlow中指数衰减法、L1和L2正则化的实现,并给出了实例演示。
摘要由CSDN通过智能技术生成

本篇的主要内容有:

  • 动态衰减法设置可变学习率
  • 为损失函数添加正则项
  • 滑动平均模型介绍

为了让MNIST数字识别模型更准确,学习几种常用的模型优化手段:

学习率的优化

学习率的设置一定程度上也会影响模型的训练,如果学习率过小,那么将会经过很长时间才会收敛到想要的结果,反之,学习率过大则可能会导致不收敛的结果,比如:优化 J(x) = x^{2}, 如果设置学习率为 1,那么整个过程:

在这里插入图片描述

可以看到整个过程不管迭代多少次,都不会改变参数值了。这里多提醒一句,我前几天刚刚接触到线性模型也遇到了这个问题,之前处理数据,我使用的学习率都是0.2, 当时遇到的数据集是这样的:

train_x = np.array([3.3, 4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,
                    7.042,10.791,5.313,7.997,5.654,9.27,3.1])
train_y = np.array([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,
                    2.827,3.465,1.65,2.904,2.42,2.94,1.3])

结果使用0.2 的学习率的使用就出问题了,模型无法收敛到一个正确的范围,当时纠结了好一会才意识到是学习率设置错了,毕竟数据的范围就已经很小了,再使用0.2就相对大了,所以一定要根据具体的数据进行设置学习率!

言归正传,在TensorFlow中,为了解决固定学习率的这种弊端,提供了一种很灵活的学习率设置方法–指数衰减法,使用这个方法可以先用较大的学习率得到一个比较好的位置(也就是图像上由比较“陡峭”的地方快速来到比较“平缓”的位置),随着迭代的过程,学习率会逐渐减小,从而使模型变得更稳定。

TensorFlow中实现了指数衰减法的函数是 tf.train.exponential_decay,这个函数可以指数级地减小学习率,实现功能如下:

decay_learning_rate = learning_rate * decay_rate ^(global_step / decay_steps)
参数:
    decayed_learning_rate: 每一轮结束后更新地学习率
    learning_rate: 最初设置地学习率
    decay_rate: 衰减系数
    decay_steps: 衰减速度

样例

global_step = tf.Variable(0)

learning_rate = tf.train.exponential_decay(
    0.1, global_step, 100, 0.96, staircase=True)

learning_step = tf.train.GradientDescentOptimizer(learning_rate).
minimize(loss, global_step=globalstep)

我们应用指数衰减法解决一个简单地线性回归问题:
首先在没有动态设置学习率的时候:

# 线性回归模型
import tensorflow as tf
import numpy as np

x_data = np.random.rand(100)
noise = np.random.normal(0.0, 0.02, x_data.shape)
y_data = 1.5 * x_data + 2.3 + noise     # 定义 w: 1.5  b: 2.3

# 定义线性模型
k = tf.Variable(np.random.rand(1))
b = tf.Variable(np.random.rand(1))
y = k * x_data + b

# 损失函数以及优化器定义
learning_rate = 0.2
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值