R Keras расплющил слой - получил массив формы 1 - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь построить модель в R Keras с TensorFlow, у которой просто есть сплющенный слой.Вот фрагмент кода:

model <- keras_model_sequential() %>%
  layer_flatten(input_shape = c(lookback, dim(train.data)[-1]))

model %>% compile(
  optimizer = optimizer_rmsprop(),
  loss = "mae"
)

history <- model %>% fit_generator(
  train_gen,
  steps_per_epoch = 500,
  epochs = 20
)

lookback равно 1200, а dim(train.data) равно (13155, 3).Вход для выравнивающего слоя - (1200, 3), и я ожидаю, что он должен вывести 1D-вектор 3600.

train_gen возвращает список из 2. Первый - это 3D-матрица с размерами (129, 1200, 3) ивторой - это одномерный вектор с размерностью (129,).

Однако я получаю ошибку:

Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: Error when checking target: expected dense_15 to have shape (3600,) but got array with shape (1,)

Я не знаю, почему это происходит.Если я добавлю layer_dense(units = 1), это сработает, но я не понимаю, почему.

1 Ответ

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

Целевые фигуры несовместимы: вы задаете в качестве цели вектор размером 1 (т. Е. (129,) означает 129 образцов меток с размером один), однако выходная форма модели равна (None, 3600), поэтому она ожидает векторы размера 3600.И именно поэтому, когда вы добавляете Плотный слой с одной единицей, проблема решается: выходная форма слоя Плотная равна (None, 1), а вы предоставляете (129,), и они совпадают друг с другом, следовательно, не нужно жаловаться.

...