keras 如何在使用ImageDataGenerator时使用to_categorical

xe55xuns  于 2022-11-13  发布在  Go
关注(0)|答案(3)|浏览(171)

我使用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个类。”或smth之类的。我怎么能在我的标签上使用to_categorical呢?

643ylb08

643ylb081#

由于您传递的是class_mode='categorical',因此不必使用to_categorical()手动将标签转换为一个热编码矢量。
Generator将返回分类标签。

vql8enpb

vql8enpb2#

如果你想知道独热向量的特定顺序,你可以通过classes参数来输入,这一点可能会很有用(即使在两年后)。
例如,如果需要"dog"=[1,0]"cat"=[0,1],则显式设置:
classes=["dog", "cat"] .

h22fl7wq

h22fl7wq3#

上面的答案已经足够清楚了,但要了解更多信息,您可以检查您的标签是否为分类形式。
下面的代码显示了一个实际的数组label,label.shape

for batch_tuple in train_generator:
    print(batch_tuple[1][0],batch_tuple[1][0].shape)
    break

输出显示:

[0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] (40,)

相关问题