Объединение DropoutWrapper и ResidualWrapper с variational_recurrent=True
Я пытаюсь создать MultiRNNCell из ячеек LSTM, обернутых как DropoutWrapper, так и ResidualWrapper. Для использования variational_recurrent=True мы должны предоставить параметр input_size для DropoutWrapper. Я не могу понять, какой input_size должен быть передан каждому слою LSTM, так как ResidualWrapper также добавляет пропускаемые соединения для увеличения ввода на каждом слое.
Я использую следующую служебную функцию для создания одного слоя LSTM:
def create_cell(units, residual_connections, keep_prob, input_size):
lstm_cell = tf.nn.rnn_cell.LSTMCell(units,
activation=tf.nn.tanh,
initializer=tf.truncated_normal_initializer(),
cell_clip=5.)
lstm_cell = tf.nn.rnn_cell.DropoutWrapper(lstm_cell,
dtype=tf.float32,
input_keep_prob=keep_prob,
output_keep_prob=keep_prob,
state_keep_prob=keep_prob,
variational_recurrent=True,
input_size=input_size)
if residual_connections:
lstm_cell = tf.nn.rnn_cell.ResidualWrapper(lstm_cell)
return lstm_cell
И следующий код для создания полной ячейки:
net = tf.layers.dense(inputs,
128,
activation=tf.nn.relu,
kernel_initializer=tf.variance_scaling_initializer())
net = tf.layers.batch_normalization(net, training=training)
cells = [create_cell(64, False, keep_prob, ??)]
for _ in range(5):
cells.append(create_cell(64, True, keep_prob, ??))
multirnn_cell = tf.nn.rnn_cell.MultiRNNCell(cells)
net, rnn_s1 = tf.nn.dynamic_rnn(cell=multirnn_cell, inputs=net, initial_state=rnn_s0, dtype=tf.float32)
Какие значения должны быть переданы в input_size для первого и последующих слоев LSTM?