КЕРАС: Получить ЛУЧШЕЕ время RNN с return_sequence = True - PullRequest
0 голосов
/ 05 октября 2018

Мои вопросы довольно просты, но кажутся нерешенными.

Input : (bs, timesteps, input_dim) -> Tensor ("stack: 0", shape = (?, 4 , 400), dtype =float32)

Слой : выход = LSTM (100, input_shape = (временные шаги, input_feature), return_sequence = True) (вход)

Ожидается : (bs, timesteps, output_dim) -> Тензор ("gru_20 / transpose_1: 0", shape = (?, 4 , 100), dtype = float32)

Выходные данные : Тензор ("gru_20 / transpose_1: 0", shape = (?, ? , 100), dtype = float32)

Почему Keras не определяет количество временных шагов, даже он получает input_shape?Когда я использую сводку модели, результат, который она показывает, имеет правильную форму вывода:


lstm_2 (LSTM) (None, 4, 100) 3232

Но не во время построения.Поэтому, когда я хочу развернуть Тензор в список Тензорных для каждого временного шага * (bs, 10), используя unstack (output, axis = 1)], я получаю ofc эту ошибку: ValueError: Невозможно вывести num из формы (?,?, 100)

Где моя ошибка?

Кстати.Добавление TimeDistributed (Dense (100)) (вопросов) приводит к правильному выводу dim: Tensor ("time_distributed_17 / Reshape_1: 0", shape = (?, 4 , 100), dtype = float32), но невариант из-за общих весов.Если нет, какой обходной путь?

1 Ответ

0 голосов
/ 05 октября 2018

Обходом может быть умножение на 1 (без изменений).

обходной путь = TimeDistributed (лямбда (лямбда x: x * 1.0)) (вывод)

Здесь работает вывод: Tensor ("time_distributed_17 / Reshape_1: 0", shape = (?, 4,100), dtype = float32)

Всегда ли необходим слой TimeDistributed при использовании return_sequence = True?

...