向以功能性API编写的keras RNN进行输入

问题描述 投票:1回答:1

我在使用功能性API编写的keras RNN进行掩膜工作时遇到了一些问题。这个想法是用形状(batch_size,timesteps,100)掩盖零填充的张量,并将其输入到SimpleRNN中。现在我有以下内容:

input = keras.layers.Input(shape=(None, 100))

mask_layer = keras.layers.Masking(mask_value=0.)
mask = mask_layer(input)

rnn = keras.layers.SimpleRNN(20)
x = rnn(input, mask=mask)

但是,这不起作用,因为它引发了以下InvalidArgumentError:

InvalidArgumentError:两个形状的尺寸1必须相等,但必须为20和2000。形状分别为[?,20]和[?,2000]。输入形状为[?,2000],[?, 20],[?, 20]的“选择”(操作:“选择”)。

通过将我的输入的形状更改为(None, 1)-一个顺序输入,其中每个元素都是一个整数,而不是n维嵌入-我已经使此代码起作用。我也有相同的想法可以与Sequential API一起使用,但是我不能这样做,因为我的最终模型将具有多个输入和输出。我也不想强制输入的形状为(None,1),因为我想在预处理过程中换出不同的嵌入模型(Word2Vec等),这意味着我的输入将从一开始就是嵌入向量。

使用keras的功能性API时,谁能帮助我在RNN中使用掩码?

python tensorflow keras masking
1个回答
0
投票

根据Masking and Padding with Keras,您无需在RNN层上手动设置掩码,在以下代码中,RNN层将自动接收掩码。

import keras

input_layer = keras.layers.Input(shape=(None, 100))

masked_layer = keras.layers.Masking(mask_value=0.)(input_layer)

rnn_layer = keras.layers.SimpleRNN(20)(masked_layer)
© www.soinside.com 2019 - 2024. All rights reserved.