Я пытаюсь использовать 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'
Я пытаюсь изменить выходные нейроны, но это не работает. Я больше не знаю, что делать. Помогите пожалуйста мне. Большое спасибо.
Понятно. Потому что я использую изображения в градациях серого. Поэтому я должен добавить аргумент ключевого слова 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")