ValueError: Вход 0 слоя simple_rnn_1 несовместим со слоем: ожидаемый ndim = 3, найденный ndim = 2. Получена полная форма: [Нет, 50] - PullRequest
0 голосов
/ 18 апреля 2020

Я новичок в тензорном потоке и пытаюсь построить многомерную (две функции для каждого временного шага) многошаговой (прогноз 12 временных шагов в будущем) прогнозной модели.

Я создал набор данных тензорного потока чтобы передать его моей модели: Когда я печатаю форму моего набора данных, я нахожу следующее:

<PrefetchDataset shapes: ((None, None, 2), (None, None)), types: (tf.float32, tf.float32)>  

Вот что я понимаю:

(None, None, 2) = Input tensor "features" : (batchSize, Timesteps input, Features by time step)

(None, None) =Output Tensor "label" (batchSize, future forecsated time steps )

Я слежу за Создание моей модели следующим образом:

keras.backend.clear_session()
tf.random.set_seed(42)
np.random.seed(42)
model = keras.models.Sequential([
  keras.layers.SimpleRNN(50),
  keras.layers.SimpleRNN(100),
  keras.layers.Dense(12),
])
optimizer = keras.optimizers.SGD(lr=1.5e-6, momentum=0.9)
model.compile(loss="mae",
              optimizer=optimizer,
              metrics=["mae"])

Когда я подгоняю модель

model.fit(train_set, epochs=5,
          validation_data=valid_set)

У меня появляется следующая ошибка:

ValueError: Input 0 of layer simple_rnn_1 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 50]

Я понимаю, что слой SimpleRNN ожидает 3-х мерный тензор. Но я думаю, что мой вклад имеет это измерение. Большое спасибо за помощь. Если вам нужно, чтобы я поделился с вами тем, как я создаю свой набор данных, я бы с удовольствием это сделал.

1 Ответ

0 голосов
/ 19 апреля 2020

Вопрос шел со второго слоя, а не с первого. По сути, активация первого слоя выдает вектор, а не последовательность, поэтому он будет иметь ранг 2, например: (a, b). Но второй слой требует трехмерного ввода. Чтобы решить эту проблему, я добавил return_sequence = True в первом слое RNN.

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