Как исправить ошибочное утверждение «выходные каналы должны делиться на группы» при попытке подогнать модель в Keras?

Я пытаюсь использовать ImageDataGenerator() для своих наборов данных изображений. Вот мой код увеличения изображения:

batch_size = 16

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

# Use flow from dataframe
train_generator = train_datagen.flow_from_dataframe(
        dataframe=train,
        directory = "data/train",
        x_col = "id",
        y_col=["not_ready", "ready"],
        target_size=(300, 300),
        batch_size=batch_size,
        class_mode = "raw",
        validate_filenames=False)

validation_generator = test_datagen.flow_from_dataframe(
        dataframe=validation,
        directory = "data/validation",
        x_col = "id",
        y_col=["not_ready", "ready"],
        target_size=(300, 300),
        batch_size=batch_size,
        class_mode = "raw",
        validate_filenames=False)

Затем используйте этот плагин в моей модели:

model = Sequential([
    layers.Conv2D(filters=16, kernel_size=(3, 3), activation='relu', input_shape=(300, 300, 1)),
    layers.MaxPooling2D(pool_size=(2, 2)),
    layers.Dropout(0.5),
    layers.Conv2D(filters=32, kernel_size=(3, 3), activation='relu'),
    layers.MaxPooling2D(pool_size=(2, 2)),
    layers.Dropout(0.5),
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.Dropout(0.5),
    layers.Dense(32, activation='relu'),
    layers.Dropout(0.5),
    layers.Dense(2, activation='sigmoid')
])

Используйте раннюю остановку:

early_stopping = EarlyStopping(monitor='val_loss',mode='min',verbose=1,patience=10, restore_best_weights=True)

Скомпилируйте и подгоните модель:

model.compile(optimizer=Adam(), loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(
        train_generator,
        steps_per_epoch=train_generator.n // batch_size,
        epochs=100,
        validation_data=validation_generator,
        validation_steps=validation_generator.n // batch_size,
        callbacks=[early_stopping])

Это когда происходит сбой кода и выдается это сообщение об ошибке.

/AppleInternal/Library/BuildRoots/8d3bda53-8d9c-11ec-abd7-fa6a1964e34e/Library/Caches/com.apple.xbs/Sources/MetalPerformanceShaders/MPSNDArray/Kernels/MPSNDArrayConvolution.mm:2317: failed assertion `output channels should be divisible by group'

Я пытаюсь изменить выходные нейроны, но это не работает. Я больше не знаю, что делать. Помогите пожалуйста мне. Большое спасибо.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Понятно. Потому что я использую изображения в градациях серого. Поэтому я должен добавить аргумент ключевого слова color_mode как в flow_from_dataframe(), так и установить его равным "оттенки серого".

train_generator = train_datagen.flow_from_dataframe(
        dataframe=train,
        directory = "data/train",
        x_col = "id",
        y_col=["not_ready", "ready"],
        target_size=(300, 300),
        batch_size=batch_size,
        class_mode = "raw",
        color_mode = "grayscale")

validation_generator = test_datagen.flow_from_dataframe(
        dataframe=validation,
        directory = "data/validation",
        x_col = "id",
        y_col=["not_ready", "ready"],
        target_size=(300, 300),
        batch_size=batch_size,
        class_mode = "raw",
        color_mode = "grayscale")

Другие вопросы по теме

ValueError: невозможно преобразовать массив размера 3 в форму (1,80)
Как перехватывать и передавать внутриуровневые выходные данные в качестве целевых данных
Хронологически распространение данных в Keras LSTM
Как показать больше изображений, чем значение размера пакета?
Я получаю эту ошибку при попытке обучить модель, Tensorflow ValueError: неожиданный результат `train_function` (пустые журналы)
Проверка данных tensorflow tfdv не работает в потоке данных Google Cloud с сообщением «Не удается получить атрибут« NumExamplesStatsGenerator »»
Как узнать, какая последняя версия Python совместима с Tensorflow v2.x?
ValueError: Отсутствуют данные для ввода "input_2". Вы передали словарь данных с ключами ['y', 'x']. Ожидаются следующие ключи: ['input_2']
Не удалось сжать dim[1], ожидалось, что размерность будет равна 1, получено 2
Вход 0 слоя «модель» несовместим со слоем: ожидаемая форма = (Нет, 250, 3), найденная форма = (Нет, 3) в обученной модели трансформатора