Переменные размеры пакетов не работают с tf.keras.layers.RNN при использовании отсева (TF2.0)? - PullRequest
0 голосов
/ 31 октября 2019

Я хотел бы использовать оболочку RNN с несколькими ячейками LSTM с выпадением. Однако, если размер пакета изменяется, я получаю сообщение об ошибке.

Когда я удаляю dropout, код работает просто отлично, поэтому я считаю, что проблема в том, что маска dropout не сбрасывается между пакетами.

import numpy as np
import tensorflow as tf

input_dim = 3
output_dim = 3
num_timesteps = 2
neurons = [32,32]

# Model
input_layer = tf.keras.Input(shape=(num_timesteps, input_dim))
cell = [tf.keras.layers.LSTMCell(n,dropout=.2) for n in neurons]
lstm = tf.keras.layers.RNN(cell,return_state=True,return_sequences=True)
lstm_out, hidden_state, cell_state = lstm(input_layer)
output = tf.keras.layers.Dense(output_dim)(lstm_out)

mdl = tf.keras.Model(
    inputs=input_layer,
    outputs=[hidden_state, cell_state, output]
)

# Run batches of different sizes
batch_1 = np.random.rand(10, num_timesteps, input_dim).astype(np.float32)
h_state, c_state, out = mdl(batch_1) # batch size is 10x2x3

batch_2 = np.random.rand(9, num_timesteps, input_dim).astype(np.float32)
h_state, c_state, out = mdl(batch_2) # batch size is 9x2x3

Этот код выдает ошибку:InvalidArgumentError: Несовместимые формы: [9,3] против [10,3] [Op: Mul] имя: model / rnn / mul /

Если я уберу отсев, код работает. Могу ли я использовать reset_dropout_mask как-нибудь? Кажется, его не называют.

...