Ошибка при проверке цели: ожидалось, что плотность будет иметь форму (1,), но получен массив с максимальным распределением формы (15662,) в качестве первого слоя

#keras #layer #max-pooling

#keras #слой #максимальное объединение

Вопрос:

Я пытаюсь использовать maxpooling в качестве первого слоя, используя keras, и у меня проблема с размерами ввода и вывода.

 print(x_train.shape)
print(y_train.shape)
(15662, 6)
(15662,)

x_train = np.reshape(x_train, (-1,15662, 6)) 
y_train = label_array.reshape(1, -1)

model = Sequential()
model.add(MaxPooling1D(pool_size = 2 , strides=1, input_shape = (15662,6)))
model.add(Dense(5, activation='relu'))
model.add(Flatten())
model.add(Dense(1, activation='softmax'))

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=
['accuracy'])
model.fit(x_train, y_train,  batch_size= 32, epochs=1)
  

После запуска модели я получаю следующую ошибку:

Ошибка при проверке цели: ожидалось, что dense_622 (последний слой) будет иметь форму (1,), но получен массив с формой (15662,)

Я делаю классификацию, и моя цель двоичная (0,1) Спасибо

Комментарии:

1. Обратите внимание, что softmax с одним нейроном не имеет смысла, это даст вам постоянный результат 1.0. Если вы хотите двоичную классификацию, вам нужна активация сигмоида.

Ответ №1:

Ваша цель должна иметь форму, (batch_size, 1) но вы передаете массив формы (1, 15662) . Похоже, что 15662 должен быть размером пакета, и в этом случае x_train должен иметь форму (15662, 6) и y_train должен иметь shape (15662, 1) . Однако в этом случае нет никакого смысла использовать слой MaxPooling1D в качестве первого слоя вашей модели, поскольку для максимального объединения требуется ввод 3D (т. Е. shape (batch_size, time_steps, features) ).). Вероятно, вы хотите исключить слой максимального объединения (и слой выравнивания). Следующий код должен работать:

 # x_train: (15662, 6)
# y_train: (15662,)

model = Sequential()
model.add(Dense(5, activation='relu', input_shape=(6,))) # Note: don't specify the batch size in input_shape
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=
['accuracy'])
model.fit(x_train, y_train,  batch_size= 32, epochs=1)
  

Но это, конечно, зависит от того, какие данные у вас есть.