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

过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

程序员文章站 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