Как ввести неизвестный размер временного шага в распределенный по времени слой Keras

#machine-learning #neural-network #tensorflow #deep-learning #keras

#машинное обучение #нейронная сеть #тензорный поток #глубокое обучение #keras

Вопрос:

У меня есть состояние ввода с shape = (84,84,4)

 state = Input(shape=(84,84,4), dtype="float")
  

Итак, я хочу передать это в некоторый распределенный по времени слой с размером временных шагов = 1 ..5 (в диапазоне от 1 до 5), и я не знаю точно, чему это равно.

Мой следующий слой выглядит примерно так:

 conv1 = TimeDistributed(Convolution2D(16, 8, 8, subsample=(4, 4), border_mode='valid',
                                      activation='relu', dim_ordering='tf'))(state)
  

И у меня ошибка на этом уровне:

 IndexError: tuple index out of range
  

Я просто хочу передать неизвестный размер временного ряда в распределенный по времени, а затем также в LSTM.

Комментарии:

1. Правильный ли мой ответ?

Ответ №1:

Итак, в основном в Keras — вам нужно указать длину последовательности, потому что во время вычислений Keras layers принимает в качестве входных данных numpy массив с заданной формой, что делает обязательным для всех входных данных (по крайней мере, в одном пакете) фиксированную длину. Но — вы все еще можете справиться с изменением размера ввода путем заполнения 0 (делая всю последовательность одинакового размера, добавляя все нулевые фиктивные временные шаги в начале), а затем маскируя то, что делает вашу сеть эквивалентной входной сети различной длины.

Ответ №2:

Вы можете задать переменную длину последовательности, например, так :

 classifier.add(TimeDistributed(Convolution2D(64,(3,3)),input_shape=(None,None,None,3)))
  

Но теперь вам придется корректировать длину вектора, когда он выравнивается или сворачивается при прогнозировании времени.