ValueError: Ошибка при проверке целевого объекта: ожидалось, что dens_20 будет иметь форму (1,), но получил массив с формой (2,) - PullRequest
1 голос
/ 26 апреля 2020

Итак, я пытаюсь выполнить бинарную классификацию с керасом CNN. Я получаю следующую ошибку при попытке подогнать мою модель к генератору. Вот генератор:

image_gen = ImageDataGenerator(
    rotation_range=30, 
    width_shift_range=0.1,
    height_shift_range=0.1, 
    horizontal_flip=True,
    rescale=1/255)

training_generator = image_gen.flow_from_directory('dataset/DATASET/TRAIN',target_size=(300,300))

Вот моя модель:

model = Sequential()

model.add(Conv2D(filters=32,kernel_size=(4,4),input_shape=(300,300,3),activation='relu'))
model.add(Conv2D(filters=32,kernel_size=(4,4),input_shape=(300,300),activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(filters=64,kernel_size=(3,3),input_shape=(300,300,3),activation='relu'))
model.add(Conv2D(filters=64,kernel_size=(3,3),input_shape=(300,300,3),activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Flatten())

model.add(Dense(units=128,activation='relu'))
model.add(Dense(units=64,activation='relu'))
model.add(Dropout(rate=0.35))
model.add(Dense(units=32,activation='relu'))
model.add(Dense(units=1,activation='sigmoid'))

model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit_generator(training_generator,epochs=5)

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

Я прикрепил скриншот с кратким описанием модели enter image description here

Заранее спасибо!

1 Ответ

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

Эта ошибка указывается c для двоичной классификации, где ImageDataGenerator используется без указания class_mode в качестве «двоичного».

В следующей строке необходимо добавить class_mode, как указано выше.

training_generator = image_gen.flow_from_directory('dataset/DATASET/TRAIN',target_size=(300,300),class_mode='binary')

class_mode должно быть указано для двоичной классификации. Если вы используете keras, он выдаст ошибку о том, что expected dense_2 to have shape (1,) but got array with shape (2,)

Если вы используете tf.keras, то NOT выдаст ошибку, но точность классификации будет показана как 50%.

Я взял cats vs dogs пример двоичной классификации, чтобы продемонстрировать проблему. Полный код здесь .

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