欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pytorch-learning-03

程序员文章站 2024-03-21 11:01:04
...

过拟合、欠拟合

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

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

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

权重衰减减轻过拟合:
不考虑参数b
pytorch-learning-03
丢弃法减轻过拟合:
pytorch-learning-03
丢弃法实现:

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随机初始化将使该层中权重参数的每个元素都随机采样于均匀分布:
pytorch-learning-03
主要思路,模型参数初始化后,每层输出的方差不该受该层输入个数影响,且每层梯度的方差也不该受该层输出个数影响。

循环神经网络进阶

LSTM

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

GRU

GRU的解释
看这张图会很好理解。
pytorch-learning-03

GRU和LSTM

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

相关标签: MachineLearning