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的计算效率更高。
上一篇: VsCode 配置安装VM虚拟机中centos7开发环境
下一篇: 创建数据表
推荐阅读