ValueError, Ошибка при проверке цели: ожидается, что плотность_1 будет иметь 4 измерения
Я пытаюсь настроить MobileNet, но получаю следующую ошибку:
ValueError, Error when checking target: expected dense_1 to have 4 dimensions, but got array with shape (10, 14)
Есть ли конфликт с тем, как я устанавливаю свои итераторы каталога?
train_batches = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet_v2.preprocess_input).flow_from_directory(
train_path, target_size=(224, 224), batch_size=10)
valid_batches = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet_v2.preprocess_input).flow_from_directory(
valid_path, target_size=(224, 224), batch_size=10)
test_batches = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet_v2.preprocess_input).flow_from_directory(
test_path, target_size=(224, 224), batch_size=10, shuffle=False)
и мой новый слой узких мест выглядит следующим образом:
x=mobile.layers[-6].output
predictions = Dense(14, activation='softmax')(x)
model = Model(inputs=mobile.input, outputs=predictions)
1 ответ
Решение
Так как плотный слой наносится на последнюю ось его ввода и учитывается тот факт, что x
является 4D-тензором, predictions
тензор также будет 4D-тензором. Вот почему модель ожидает 4D выход (т.е. expected dense_1 to have 4 dimensions
) но ваши ярлыки 2D (т.е. but got array with shape (10, 14)
). Чтобы решить эту проблему, вам нужно сделать x
как 2D-тензор. Один из способов сделать это - использовать Flatten
слой:
x = mobile.layers[-6].output
x = Flatten()(x)
predictions = Dense(14, activation='softmax')(x)