Tensoflow2 LSTM - Неиспользуемый параметр input_shape? - PullRequest
1 голос
/ 02 мая 2020

Итак, я построил Neural Network со следующим кодом:

import tensorflow as tf

tf_model = tf.keras.Sequential()
tf_model.add(tf.keras.layers.LSTM(50, activation='relu'))
tf_model.add(tf.keras.layers.Dense(20, activation='relu'))
tf_model.add(tf.keras.layers.Dense(10, activation='relu'))
tf_model.add(tf.keras.layers.Dense(1, activation='linear'))
tf_model.compile(optimizer='Adam', loss='mse')

Мой тренировочный набор имеет следующую форму:

>> ts_train_X.shape
(16469, 3, 21)

Я прочитал множество статей и вопросов здесь о stackoverflow чтобы привести фрейм данных в правильную форму для LSTM. Почти на каждой из найденных мною страниц указан параметр input_shape и он передан либо в LSTM (..), либо в Sequential (..).

Когда я смотрю на LSTM API I не может найти ссылку на этот параметр. У меня также был взгляд на исходный код, и мне кажется, что форма каким-то образом автоматически выводится, но я не уверен в этом.

Это приводит меня к моему вопросу: Почему мой код Работа? Как слой LSTM как первый слой может узнать форму моих входных данных, если я не укажу параметр input_shape?


edit: изменить заголовок согласно предложению в комментариях.

1 Ответ

2 голосов
/ 02 мая 2020

Параметр input_shape может быть передан конструктору любого подкласса keras Layer, поскольку именно так определяется API.

Код работает, поскольку input_shape передается в качестве аргумента ключевого слова. (**kwargs), затем эти ключевые аргументы передаются конструктором LSTM конструктору Layer, который затем переходит к сохранению информации для последующего использования. Это фактически означает, что параметр input_shape не нужно определять в каждом слое, и вместо этого он передается в качестве аргумента ключевого слова.

Я думаю, что проблема в том, что keras был перемещен в tensorflow, документация может быть неполной. Дополнительную информацию о параметре input_shape можно найти в Руководстве по последовательному API .

...