Невозможно сжать дим [1], ожидаемый размер 1, получил 499 - PullRequest
3 голосов
/ 17 марта 2019

Я пытаюсь сделать AutoEncoder и застрял в вышеупомянутой ошибке. Просмотр других сообщений на Stack Exchange не помог.

Вот ошибка полностью:

InvalidArgumentError: Can not squeeze dim[1], expected a dimension of 1, got 499
 [[{{node metrics_12/acc/Squeeze}}]]
 [[{{node ConstantFoldingCtrl/loss_12/time_distributed_6_loss/broadcast_weights/assert_broadcastable/AssertGuard/Switch_0}}]]

Я могу собрать свою модель. Вот оно:

Слой (тип) Выходная форма Параметр #
================================================== =============== lambda_7 (Lambda) (Нет, 499, 22) 0
_________________________________________________________________ cu_dnnlstm_14 (CuDNNLSTM) (нет, 300) 388800
_________________________________________________________________ repeat_vector_12 (RepeatVect (Нет, 499, 300) 0
_________________________________________________________________ cu_dnnlstm_15 (CuDNNLSTM) (нет, 499, 50) 70400
_________________________________________________________________ time_distributed_6 (TimeDist (None, 499, 22) 1122
================================================== =============== Всего параметров: 460,322 Обучаемые параметры: 460,322 Необучаемые параметры: 0

Лямбда-слой принимает дополненную последовательность формы (1499) и преобразует ее в единичный кадр с 22 возможными значениями. Затем я передаю это через кодирование CuDNNLSTM, вектор повторения, другой CuDNNLSTM, а затем распределенный по времени плотный слой с активацией softmax.

Я использую:

model.compile('rmsprop', 'sparse_categorical_crossentropy', metrics=['acc'])

А:

model.fit(s_min_one, s_min_one,
   batch_size=batchS,
   epochs=epochS,
   verbose = 1,  
   shuffle=True)

Что дает мне мою ошибку.

Я использую разреженные категории, чтобы мои данные могли быть в целочисленном формате, принимая значения от 0 до 21 (для 22 функций). И я не понимаю, почему ошибка ожидает измерения 1 для чего-либо. Это почти как если бы я хотел, чтобы я перевернул свои столбцы и строки?

1 Ответ

1 голос
/ 11 апреля 2019

Ваша проблема связана с формой вывода. sparse_categorical_crossentropy ожидает целочисленные цели (см. документацию : "При использовании потери sparse_categorical_crossentropy ваши цели должны быть целое цели.")

Вы передаете данные, которые имеют форму (batch_size, 1, 499) как входные данные, так и метки:

model.fit(s_min_one, s_min_one, ...)

Это не сработает, ярлыки должны иметь форму (batch_size, 1) или просто (batch_size,).

Я не совсем уверен, что понимаю, чего вы пытаетесь достичь, но похоже, что вам нужно соответствующим образом адаптировать функцию потерь.

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