使用ImageDataGenerator时如何使用to_categorical

时间:2018-07-12 12:26:32

标签: python tensorflow machine-learning keras

我正在使用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?

2 个答案:

答案 0 :(得分:2)

自从传递class_mode='categorical'以来,您不必使用to_categorical()手动将标签转换为一个热编码矢量。

生成器将返回分类标签。

答案 1 :(得分:0)

(即使在两年后)也可能会有用,即使您想要特定的单热向量顺序,也可以通过classes自变量来输入。
例如,如果要使用"dog"=[1,0]"cat"=[0,1],则可以显式设置:
classes=["dog", "cat"]