Keras пользовательский слой RNN с тем же вводом на каждом временном шаге - PullRequest
0 голосов
/ 24 января 2020

Я хотел бы реализовать RNN «один ко многим» в Keras, который принимает один и тот же вход на каждом временном шаге:

text

Я мог бы просто повторить ввод x во временном измерении (то есть x_ {t} = x для всех t), но это будет неэффективным использованием памяти и может стать проблематичным c, когда и x, и количество временных шагов очень велики.

Например, предположим, что я хочу, чтобы RNN просто накапливал (суммировал) входные данные x (которые одинаковы на каждом временном шаге). Для простоты предположим, что вход, скрытый слой и выход являются скалярами. Следующий код реализует этот RNN и запускает его в течение трех временных шагов, но использует RepeatVector для (неэффективного) копирования входных данных во временное измерение.

class AccumulationRNN(keras.layers.Layer):
  def __init__(self, **kwargs):
    self.state_size = [1,]
    super(AccumulationRNN, self).__init__(**kwargs)

  def call(self, x, state):
    # Example functionality, not what I actually want to do.
    state  = state[0] + x
    output = state

    return output, state

# Create an input of ones.
x = tf.ones((1,1))  # shape: (BATCH_SIZE=1, 1)

# Repeat x over the temporal dimension. This is the memory-inefficient step.
x_repeated = keras.layers.RepeatVector(3)(x)  # shape: (BATCH_SIZE=1, TIMESTEPS=3, 1)

keras.layers.RNN(AccumulationRNN(), return_sequences=True)(x_repeated)
<tf.Tensor: shape=(1, 3, 1), dtype=float32, numpy=
array([[[1.],
        [2.],
        [3.]]], dtype=float32)>

Это ожидаемый результат , но есть ли способ сделать это без повторения х?

(Я полагаю, что этот вид RNN довольно распространен в механизмах внимания, где x представляет собой, например, изображение с высоким разрешением, а скрытый слой обрезает это изображение по-разному на каждом временном шаге и выполняет некоторую другую обработку она.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...