Python 向功能API中编写的keras RNN输入

Python 向功能API中编写的keras RNN输入,python,tensorflow,keras,masking,Python,Tensorflow,Keras,Masking,我在使用用函数API编写的keras RNN进行掩蔽时遇到了一些问题。这个想法是用形状(批量大小,时间步长,100)遮罩一个零填充张量,并将其输入到SimpleRN中。现在我有以下几点: 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

我在使用用函数API编写的keras RNN进行掩蔽时遇到了一些问题。这个想法是用形状(批量大小,时间步长,100)遮罩一个零填充张量,并将其输入到SimpleRN中。现在我有以下几点:

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]。对于带有输入形状的“选择”(op:“选择”):[?,2000],,?,20],,,?,20]

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

在使用keras的功能API时,有谁能帮助我将掩码与RNN一起使用吗?

根据,您不需要在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)
根据,您不需要在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)

完美的谢谢,太好了!非常感谢。