深度学习问答模型记录1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30362711/article/details/83587811

第一天:

采用一个单层的lstm,输入是embedding的向量。输出接sigmoid二分类

训练结果有一次训练5epoch就达到了百分之98,其他的即使经过100+epoch也无法达到目标结果

查找原因:

将batch-size变大(可以加速训练,但无法500轮也过不了百分之90)

将learning-rate变为0.1(可以加速训练,但500epoch最高到百分之80)

将learning-rate变为0.001(训练速度慢,但500epoch最高到百分之80)

batch_size:  600

hidden_size:800

embed_size:1000

time_length:70

learning_ra:0.001

epoch:        250

correct_pro:0.66持续没变

______________________________

batch_size:  600

hidden_size:800

embed_size:1000

time_length:70

learning_ra:0.1

epoch:        500

correct_pro:0.74持续没变

____________________________________________________________________________________________________________________________________________________________________________________________________________

第二天:

层数少会使网络局限在表面的文字结构,而没有到达语义层面,因此尝试增加网络的层数。

而增加了batchsize会导致更有利于去掉不相干词的干扰,因此这里正确率还是上不去那就说明不是训练速度的问题,而是

网络表述能力的问题。经过多次尝试,将batch_size增加到2000也没用,因此还是采用多层尝试。

网络参数为:一共3层,HIDDEN_SIZE数量分别是3*h,2*h,h

BATCH_SIZE = 800
HIDDEN_SIZE = 300
EMBEDDING_SIZE = 1000
TIME_LENGTH = 70
LEARNING_RATE = 0.1

结果和以前一样训练感觉没有任何效果

_——————————————————————————————————————————————————————————————————————————————————————————————————————————————

第三天:

使用attention 模型来做,仍旧没效果;

看原论文,发现在机器翻译领域,一般的sentence length(句子长度)都是小于30个词, 也就是说词不能太长如图

而我用的句子的长度是都是70个词,所以这必然是一个原因。要不然我就应当使用attention网络来做。我也终于明白了为什么注意力网络出来之后才有了填空的模型。

接下来尝试减少句子的长度,我要让所有训练数据长度是20。并且利用论文中的初始化:

batch_size=80;均值都是0,偏置都是0.递归网络的矩阵初始化为随机正交矩阵。其他矩阵都是方差0.001.

由于训练时一个batch_size的语句都要句子相同,因此将训练数据按句子长度进行排序,每个batch-size的time-length取其中最长的句子长度。

采用的gpu都是当前最牛的titan。平均每个模型都要训练5epoch,时间为100多小时。

——————————————————————————————————————————————————————————————————————————————————————————————————————————————

第四天

由于论文中的训练时间都是很长的,说明其训练数据极其多,由于我的训练数据较少,所以只能训练几百epoch来弥补。

第二点就是之前修改的,在用lstm时要将语句的长度限制在20个字。

网络参数:网络为3层lstm网络。

BATCH_SIZE = 700
HIDDEN_SIZE = 300
EMBEDDING_SIZE = 500
TIME_LENGTH = 20

经过以上修改测试结果为:(红字原因是程序逻辑错误,导致结果偏低)

(1)正确率从百分之40,经过300epoch达到了百分之73左右,极其缓慢的增长。但是loss的值没什么变化,感觉有可能是

程序问题,暂时未查明原因。

(2)接下来将学习率从0.01降到0.001,继续原来的模型、参数都不变来训练,正确率从69降到60,最后上升到75.经历300epoch。训练时间为1个小时以内。

(3)继续学习,学习率0.0001,同上。正确率保持在75左右。感觉是学习率减小的原因,因此将学习率改为0.001尝试。

修改程序后:

(1)正确率从百分之50经过15000*150epoch的数据计算直接跳到百分之80正确率,接下来到达百分之90以上。学习率是0.01

(2)尝试将学习率继续提高,看其训练速度。

将学习率提高到0.1,加快了收敛速度,loss也迅速减小。40epoch以后正确率直接到达90以上。继续训练直到300epoch到达98,不涨。

(3)将学习率改到0.01后,训练300epoch无太多变化。

_______________________——————————————————————————————————————————————————

第五天

将网络升级成双向3层lstm后,其他参数不变,只经历150论就达到97正确率。

猜你喜欢

转载自blog.csdn.net/qq_30362711/article/details/83587811
今日推荐