У меня возникли некоторые проблемы с маскировкой RNN, написанной на Functional API. Идея состоит в том, чтобы замаскировать тензор с добавлением нуля формой (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]. для 'Select' (op: 'Select') с формами ввода: [?, 2000], [?, 20], [?, 20].
Путем изменения формы моего ввода на (None, 1)
- последовательный ввод, в котором каждый элемент представляет собой одно целое число вместо n-мерных вложений - я получил этот код для работы. Я также получил ту же идею работать с последовательным API, но я не могу этого сделать, так как моя окончательная модель будет иметь несколько входов и выходов. Я также не хочу, чтобы форма моего Входного элемента была (Нет, 1), поскольку я хочу поменять различные модели встраивания (Word2Ve c, et c) во время предварительной обработки, что означает, что мои входные данные будут встраивать векторы из начало.
Кто-нибудь может мне помочь с использованием масок с RNN при использовании функционального API-интерфейса keras?