已知单向LSTM可以通过以下两行命令获取
x = Embedding(max_features, embedding_dims, input_length=maxlen)(input_layer)
lstm_layer=LSTM(128)(x)
后想将lstm换成bi-lstm,也可直接调用下述包来实现:
from keras.layers import Bidirectional
我没有去查API而是在网上找了个demo。 图片来源:https://blog.csdn.net/fendouaini/article/details/80198994 就直接按照惯常思维带到自己代码中使用(我的代码中没有按照model.add()的形式来搭建模型),犯了下面的错误:
lstm_layer = Bidirectional(LSTM(128,return_sequences=True)(x),merge_mode='concat')
有了报错:AttributeError:'Tensor' object has no attribute 'get_config' 查了查知道了正确的使用方式,两个Layer的函数,且两个函数嵌在一起,直接向外层的函数传入(x:上一layer)即可:
lstm_layer = Bidirectional(LSTM(128,return_sequences=True),merge_mode='concat')(x)
然后代码有了新的报错,是shape不匹配,我去查了下LSTM的API发现
return_sequences=True时每一时刻的state都会返回,此时shape为(batch_size,time_steps,hidden_size)
而return_sequences=False时只会返回最终state,shape为(batch_size,hidden_size)