Форма ввода в кератах (эта потеря предполагает, что цели будут иметь ту же форму, что и выходные данные) - PullRequest
0 голосов
/ 14 июня 2019

я впервые использую keras, я пытаюсь следовать учебнику, который нашел в Интернете, и подгоняю к нему свои данные. У меня есть матрица и двоичные метки.

> str(d_train)
 num [1:1062, 1:180] -0.04748 0.04607 -0.05429 -0.0126 -0.00219 ...
> str(trainlabels)
 num [1:1062, 1:2] 0 0 0 0 0 0 1 0 0 0 ...

мой код:

model = keras_model_sequential()
model %>%
  layer_dense(units = 8, activation = 'relu', input_shape = c(180)) %>%
  layer_dense(units = 3, activation = "softmax")
summary(model)
## Compile
model %>%
  compile(loss = "binary_crossentropy",
          optimizer = "adam",
          metrics = "accuracy")
## Fit model
history = model %>%
  fit(d_train,
      trainlabels,
      epoch=200,
      batch_size=32,
      validation_split=0.2)

Я не могу соответствовать модели, я получаю это сообщение об ошибке:

Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: A target array with shape (1062, 2) was passed for an output of shape (None, 3) while using as loss `binary_crossentropy`. This loss expects targets to have the same shape as the output.

Основываясь на сообщении об ошибке, спрашивая другую форму моего входного массива, я попытался изменить размеры без удачи.

1 Ответ

1 голос
/ 14 июня 2019

Я не эксперт по R, но здесь:

layer_dense(units = 3, activation = "softmax")

Вы говорите Керасу, что выходные данные вашей сети имеют три класса.Ваши ярлыки имеют форму (1062, 2), что предполагает наличие двух классов, следовательно, есть несоответствие.

Вы можете просто изменить units = 2 в своем последнем плотном, и это должно сработать.Также обратите внимание, что вы используете активацию softmax, и в этом случае вы должны предпочесть потерю categorical_crossentropy.

Чтобы использовать binary_crossentropy для двоичной классификации, вы должны иметь units = 1, sigmoid активация, а метки должны быть (1062, 1) или (1062,), что означает, что они закодированы в 0-1.

...