CNN 和RNN 中input 长度不一致问题
转自:https://www.jianshu.com/p/86d667ee3c62,感谢分享!
pad_sequences & Masking layer
上面提到,文本数据也可以用CNN来处理。很多人有疑问,CNN的输入通常是一个(图像)矩阵,而文本中句子或者文章的长度不一,CNN如何将长短不一的输入转化成矩阵呢?
答案是pad_sequences
keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32',
padding='pre', truncating='pre', value=0.)
sequences: 所有的句子
maxlen: 把所有句子的长度都定为maxlen,如果是None,则maxlen自动设置为sequences中最长的那个
padding: 在句子前端(pre)或后端(post)填充
truncating: 截断过长的句子,从前端(pre)或者后端(post)截断
value: 填充的数值
假设我们使用0填充,那么多无用的0,会不会影响结果呢?
对于CNN来说,是不影响的。
对于RNN也需要pad_sequences,此时填充的0是多余的,就需要使用Masking layer忽略其中的0值。
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(32))
作者:fighting41love
链接:https://www.jianshu.com/p/86d667ee3c62
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。