Не знаете, нужно ли менять class_mode с двоичного на категориальный в Imagedatagenerator
Когда я перешел с 2 классов на 4 в модели CNN. У меня есть ошибки. Многие люди помогли мне их решить, например, мне нужно было изменить убыток наsparse_categorical_crossentropy
и функция активации последнего слоя.
model.compile(loss='sparse_categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
history = model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples//batch_size,
epochs=epochs,
validation_data = validation_generator,
validation_steps = validation_generator.samples // batch_size,
)
Я смущен, так как мне пришлось изменить функцию потерь с binary_crossentropy
к categorical_crossenpropy
. Я хочу знать, следует ли мне изменить class_mode с двоичного на категориальный для 4 классов или оставить его как двоичный.
train_datagen=ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip = True,
#vertical_flip = True,
validation_split=0.2,
brightness_range=[0.5, 1.5]
)
#test_datagen = ImageDataGenerator(
# rescale=1./255,
#
#)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width,img_height),
batch_size=batch_size,
shuffle=True,
class_mode='binary',
subset='training'
)
validation_generator = train_datagen.flow_from_directory(
train_data_dir, # same directory as training data
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='binary',
subset='validation'
#validation_data_dir,
#target_size=(img_width,img_height),
#batch_size=batch_size,
#class_mode='binary'
)
2 ответа
Я думаю, что чтение документации будет хорошей отправной точкой. Он ответит на все ваши вопросы, а затем и на некоторые.
class_mode: одно из значений "категориальный", "двоичный", "разреженный", "входной" или "Нет". По умолчанию: "категоричный". Определяет тип возвращаемых массивов меток: - "категориальный" будет двухмерными метками с горячим кодированием, - "двоичный" будет 1D двоичными метками, "разреженный" будет представлять собой одномерные целочисленные метки, - "вход" будет идентичными изображениям для ввода изображений (в основном используется для работы с автокодерами). - Если None, метки не возвращаются (генератор будет выдавать только пакеты данных изображения, что полезно использовать с model.predict_generator()). Обратите внимание, что в случае class_mode None данные все равно должны находиться в подкаталоге каталога, чтобы они работали правильно.
Итак, вы должны использовать categorical_crossentropy
как функцию потерь, если вы выберете categorical
за class_mode
, а также sparse_categorical_crossentropy
если вы выберете sparse
.
Конечно, вы должны это изменить. Если у вас всего 2 класса, используйтеclass_mode='binary'
в flow_from_directory
функция и binary_crossentropy
как потеря. Если у вас более 2 классов, используйтеclass_mode='categorical'
а также categorical_crossentropy