前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytorch技巧-Early Stop, Dropout, stochastic Gradient Descent

Pytorch技巧-Early Stop, Dropout, stochastic Gradient Descent

作者头像
用户6719124
发布2019-11-17 21:50:07
3.4K0
发布2019-11-17 21:50:07
举报

本节介绍其他的一些小技巧,

在很多的优化案例中,它们的优化进程会如下图所示

随着横坐标epoch的进行,train部分的accuracy持续上升,train部分的accuracy增加到临界点后会开始发生over fitting现象,我们一般使用Validation来对临界点进行检测。在取到最大值时便停止调test,将此时取得的参数保存用来做最终的模型参数。

可注意到train若不停止会进行无限长的时间,Early stop的引入会提前终止训练,即在test accuracy上升到临界值不发生改变后,就停止训练。

由此我们总结Early stop有以下特点:

(1)通过Validation set来选择合适的参数

(2)通过Validation来进行检测模型优化表现

(3)在最高的Val performance(表现时)停止优化

而Dropout同样用途十分广泛

Dropout是用来防止Overfitting十分有效的手段,其思路构建假设为:

(1)不全部学习参数,只学习有效的参数

(2)每层链接都有一定的概率“丢失”

如下图所示

通过“丢失”链接后,有效的减少了运算量,使优化更为平滑

Dropout可有效的防止神经网络学习到一些噪声

Dropout的添加也十分简单,直接在神经层添加即可

代码语言:javascript
复制
bet_dropout = torch.nn.Sequntial(
    torch.nn.Linear(784, 200),
    torch.nn.Dropout(0.5),
# 50%的几率丢失断掉链接
    torch.nn.ReLU(),
    torch.nn.Linear(200, 10),
)

这里注意pytorch和tensorflow在这上面的区别很大:

torch.nn.Dropout(p=dropout_prob)

当p=dropout_prob设置为1时,表明链接有可能全部断掉

当p=dropout_prob设置为0.001时,表明链接断掉的几率很小

而tf.nn.dropout(keep_prob)中

当keep_prob为1时,表明链接全部保留

但当keep_prob为0.001时,表明链接断掉的概率是0.999

两组API所表达的含义正好相反

要注意 在Validation部分要人为地将dropout切换掉,否则在validation部分仍会连接消失。

切换代码为

代码语言:javascript
复制
for epoch in range(epochs):
    net_dropped.train()
for batch_idx, (data, target) in enumerate(train_loader):
pass

        net_dropped.eval()
        test_loss = 0
        correct = 0
for data, target in test_loader:
pass

下面介绍Stochastic Gradient Descent

其中Stochastic意为随机,但并不代表(random)的随机。只是分布有一定的随机性,并不是完全的random。

Stochastic Gradient Descent用来解决的问题是,原本计算loss时假设有60K的数据,那么计算loss

使用Stochastic Gradient Descent的原因在于目前的硬件(显卡)价格仍十分昂贵

适用于深度学习的显卡价格基本上都1W起

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档