ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【510】NLP实战系列(七)—— 进阶版(dropout/stacking/BiLSTM)

2020-12-28 10:36:33  阅读:411  来源: 互联网

标签:layers NLP recurrent 进阶 BiLSTM dropout 0.2 add model


参考:Bidirectional 层

  进阶版包含以下技术:

  • Recurrent dropout(循环 dropout), a specific, built-in way to use dropout to fight overfitting in recurrent layers.
    • 使用 dropout 正则化的网络需要更长的时间才能完全收敛,因此网络训练轮次要增加为原来的 2 倍。  
  • Stacking recurrent layers(堆叠循环层), to increase the representational power of the network (at the cost of higher computational loads).
    • 在 keras 中逐个堆叠循环层,所有中间层都应该返回完整的输出序列(一个 3D 张量),而不是只返回最后一个时间步的输出。这个可以指定 return_sequences=True 来实现。
  • Bidirectional recurrent layers(双向循环层), which presents the same information to a recurrent network in different ways, increasing accuracy and mitigating forgetting issues.
    • 需要使用 Bidirectional 层,它的第一个参数是一个循环层实例。Bidirectional 层对这个循环层创建了第二个单独实例,然后使用一个实例按正序处理输入序列,另一个实例按逆序处理输入序列。

1. Bidirectional 层

1.1 语法

keras.layers.Bidirectional(layer, merge_mode='concat', weights=None)

1.2 参数

  • layerRecurrent 实例。
  • merge_mode: 前向和后向 RNN 的输出的结合模式。 为 {'sum', 'mul', 'concat', 'ave', None} 其中之一。 如果是 None,输出不会被结合,而是作为一个列表被返回。

2. 举例

2.1 Recurrent dropout

from keras.layers import LSTM

model = Sequential()
model.add(Embedding(max_features, 32))
model.add(LSTM(32,
               dropout=0.2,
               recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['acc'])
history = model.fit(input_train, y_train,
                    epochs=20,
                    batch_size=128,
                    validation_split=0.2)

  

2.2 Stacking recurrent layers

from keras.layers import LSTM

model = Sequential()
model.add(Embedding(max_features, 32))
model.add(LSTM(32,
               dropout=0.2,
               recurrent_dropout=0.2,
               return_sequences=True))
model.add(LSTM(32,
               dropout=0.2,
               recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['acc'])
history = model.fit(input_train, y_train,
                    epochs=20,
                    batch_size=128,
                    validation_split=0.2)

  

2.3 Bidirectional recurrent layers

from keras.layers import LSTM
from keras.layers import Bidirectional

model = Sequential()
model.add(Embedding(max_features, 32))
model.add(Bidirectional(LSTM(32,
                             dropout=0.2,
                             recurrent_dropout=0.2,
                             return_sequences=True)))
model.add(Bidirectional(LSTM(32,
                             dropout=0.2,
                             recurrent_dropout=0.2)))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['acc'])
history = model.fit(input_train, y_train,
                    epochs=5,
                    batch_size=128,
                    validation_split=0.2)

 

标签:layers,NLP,recurrent,进阶,BiLSTM,dropout,0.2,add,model
来源: https://www.cnblogs.com/alex-bn-lee/p/14200376.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有