pytorch-learning-03

过拟合、欠拟合

欠拟合:模型偏差;过拟合:模型误差。

为什么使用K折交叉验证?
因为验证集不用来训练模型,而预留大量的验证集会显得奢侈。

模型复杂度和样本规模影响欠拟合和过拟合。
样本越少,模型越复杂,越容易过拟合(测试集误差高于训练集)。

权重衰减减轻过拟合:
不考虑参数b
在这里插入图片描述
丢弃法减轻过拟合:
在这里插入图片描述
丢弃法实现:

def dropout(X, prob):
    X = X.float()
    keep_prob = 1 - prob
    if keep_prob == 0:
        return torch.zeros_like(X)
    # 随机产生0-1的值
    mask = (torch.rand(X.shape) < keep_prob).float()
    return mask * X / keep_prob

梯度爆炸与梯度消失

一个解释

随机初始化模型参数

对于多层感知机来说,如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。在这种情况下,无论隐藏单元有多少,隐藏层本质上只有1个隐藏单元在发挥作用。因此,我们通常将神经网络的模型参数,特别是权重参数,进行随机初始化。
pytorch的默认随机初始化:pytorch对于不同的layer又自己默认的初始化方式。
Xavier随机初始化:
假设某全连接层的输入个数为 𝑎 ,输出个数为 𝑏 ,Xavier随机初始化将使该层中权重参数的每个元素都随机采样于均匀分布:
在这里插入图片描述
主要思路,模型参数初始化后,每层输出的方差不该受该层输入个数影响,且每层梯度的方差也不该受该层输出个数影响。

循环神经网络进阶

LSTM

解决长序列训练过程中的梯度消失和梯度爆炸问题。
解释的很好的一篇文章:LSTM的解释
看这张图会很好理解,c用来进行长期记忆,h用来短期记忆,c就相当于RNN中的h,LSTM中的h用来和x形成3个门控和1个输入。
在这里插入图片描述

GRU

GRU的解释
看这张图会很好理解。
在这里插入图片描述

GRU和LSTM

GRU在LSTM之后提出,两个模型的效果相似,但是GRU的计算效率更高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值