我正在使用Keras对图像(多个类)进行分类,并且正在使用ImageDataGenerator。它会自动查找所有类,并且似乎没有在任何变量中写入标签。我认为我需要使用to_categorical以矩阵形式存储标签,但我只是不知道在哪里使用它。
这是我的代码的片段:
...
datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
# generator for training
train_generator = datagen.flow_from_directory(
train_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical')
# generator for validation
val_generator = datagen.flow_from_directory(
val_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical')
# generator for testing
test_generator = datagen.flow_from_directory(
test_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical')
# train
model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=val_generator,
validation_steps=nb_validation_samples // batch_size)
生成器只是说“找到了442个属于5类的图像”。或类似的东西如何在标签上使用to_categorical?
答案 0 :(得分:2)
自从传递class_mode='categorical'
以来,您不必使用to_categorical()
手动将标签转换为一个热编码矢量。
生成器将返回分类标签。
答案 1 :(得分:0)
(即使在两年后)也可能会有用,即使您想要特定的单热向量顺序,也可以通过classes
自变量来输入。
例如,如果要使用"dog"=[1,0]
和"cat"=[0,1]
,则可以显式设置:
classes=["dog", "cat"]
。