tensorflow1中处理变长字符串的一种方法是:
(1)把所有字符串用补全的方式变成相同长度的;
(2)然后训练的时候,通过一个参数 seqence_length来告诉模型,输入的‘可用长度’,后面补全的数值就‘无视’了。
对于tensorflow2,处理的基本思想类似,不过使用Masking的方式,具体方法如下。
1.对变长输入补全,变为相同长度
例如原始输入sequence长度分别为3和2:
x1=[[1,0,0,0],[0,1,0,0],[0,0,1,0]]
x2=[[0,1,0,0],[1,0,0,0]]
用mask_value=-0.1补全x2,得到:
这样输入的两个sequence长度就相同了。
2.在RNN层之前加入Masking层
示例代码如下:
import tensorflow as tf
model=Sequential()
#### masking 层
model.add(tf.keras.layers.Masking(mask_value=-0.1,input_shape=[None,7]))
#### rnn 层
model.add(tf.keras.layers.GRU(30))
####
model.add(Dense(1,activation=tf.keras.activations.sigmoid))
model.compile(loss=tf.losses.binary_crossentropy,
optimizer=tf.optimizers.Adam(),
metrics=["accuracy"])