过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶
程序员文章站
2022-07-13 11:35:54
...
一,过拟合、欠拟合及其解决方案
过拟合:模型的训练误差远小于它在测试数据集上的误差
欠拟合:模型无法得到较低的训练误差
因素:模型复杂度和训练数据集大小
训练集数据太少,会引起过拟合,模型越越简单,会引起欠拟合。折中办法是在保证能够训练的情况下,模型尽量复杂,数据量也随之增多
机器学习中遇到的方法:
- 正则化:在loss函数中加入,w^2项来强行训练减少loss,在训练的时候限制权值变大。训练过程需要降低整体的 loss,这时候,一方面能降低实际输出与样本之间的误差,也能降低权值大小
- dropout:解决网络各层输出对该层的网络结构的依赖性(虽然我不知道什么叫做依赖性),每次训练的时候,随机挑选几个神经元,作为改层的总神经元,
- 数据扩增,即增加训练数据样本:解决过拟合最有效的方法,只要给足够多的数据,让模型看见尽可能多的例外情况,它就会不断修正自己,从而得到更好的结果
- Early stopping:是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合
参考链接 https://www.cnblogs.com/zhhfan/p/10476761.html
梯度消失:
- 出现鞍点,
- 出现在一阶导数为0,二阶导数也为0的点,此时梯度为0,单不是loss的最小点
梯度爆炸:
- 模型太复杂参数太大,在计算梯度时超过计算机的计算范围
梯度消失,梯度爆炸解决办法:
- 对每层网络的输出作标准化 BatchNormalization
- 梯度裁剪
- ResNet 残差解构
- 换用Relu,LeakyRelu,Elu等**函数
参考链接 https://www.jianshu.com/p/3f35e555d5ba
二 循环神经网络进阶 GRU,LSTM,深度RNN
参考循环神经网络——自动写歌词
新学API
collections.Counter()
将一个列表set后变成Counter
a=['red','blue','red']
b=collections.Counter(a)
>> Counter({'red':2,'blue':1})
dict(b) #获得字典
>> {{'red':2,'blue':1}}
sorted和sort
L=[('b',3),('a',4),('d',1),('c',2)]
sorted(L,cmp=lambda x,y : cmp(x[1],y[1])) #利用cmp函数比较
>>[('d',1),('c',2),('b',3),('a',4),]
sorted(L,key=lambda x:x[1]) #利用key
>>[('d',1),('c',2),('b',3),('a',4),]
sort
a=[1,2,4,3]
b=[('b',3),('a',4),('d',1),('c',2)]
list.sort(key=None,reverse=False) #reverse=False 升序
a.sort(reverse=False)
b,sort(key=lambda x:x[1],reverse=False)
dict.get('a',num)
#寻找关键字a,如果找到返回'a'对应的值,否则返回num
上一篇: 创建触发器、函数、存储过程、执行语句
下一篇: mogrel有关