TensorFlow2-RNN-Variable Length Input-变长输入序列处理-例子

文章目录

    • 1.对变长输入补全,变为相同长度
    • 2.在RNN层之前加入Masking层
    • 3. 模型的其他部分(训练,测试等)和一般的神经网络相同

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,得到:

x2=[[0,1,0,0],[1,0,0,0],[-0.1,-0.1,-0.1,-0.1]]

这样输入的两个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"])

3. 模型的其他部分(训练,测试等)和一般的神经网络相同

你可能感兴趣的:(#,《Hands,On,ML》笔记,TensorFlow)