#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)))
Но теперь вам придется корректировать длину вектора, когда он выравнивается или сворачивается при прогнозировании времени.