本节介绍其他的一些小技巧,
在很多的优化案例中,它们的优化进程会如下图所示
随着横坐标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的添加也十分简单,直接在神经层添加即可
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部分仍会连接消失。
切换代码为
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起
本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!