python - 向用功能 API 编写的 keras RNN 进行输入

标签 python tensorflow keras masking

我在使用用功能 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: Dimension 1 in both shapes must be equal, but are 20 and 2000. Shapes are [?,20] and [?,2000]. for 'Select' (op: 'Select') with input shapes: [?,2000], [?,20], [?,20].

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

在使用 keras 的函数式 API 时,有人可以帮助我将掩码与 RNN 结合使用吗?

最佳答案

根据Masking and Padding with Keras ,你不需要在RNN层上手动设置mask,在下面的代码中RNN层将自动接收mask。

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)

关于python - 向用功能 API 编写的 keras RNN 进行输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59907559/

相关文章:

python - Keras Transfer Learning Resnet50 using fit_generator got high acc but low val_acc 问题

python - 如何使输出的最后一列仅包含列表的每个元素而不是整个列表?

Python datetime 对象显示错误的时区偏移

tensorflow - 将多个文件输入到 Tensorflow 数据集中

python - 值错误 : Weights for model sequential have not yet been created

python - 如何使用keras实现LSTM中多元回归的输入?

python - 为什么 sys.stdout.write 输出意外字符?

python re 与 groupdict

tensorflow - 如何为 tensorflow 准备我自己的数据?

python - Keras,如何获得每一层的输出?