我使用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呢?
3条答案
按热度按时间643ylb081#
由于您传递的是
class_mode='categorical'
,因此不必使用to_categorical()
手动将标签转换为一个热编码矢量。Generator将返回分类标签。
vql8enpb2#
如果你想知道独热向量的特定顺序,你可以通过
classes
参数来输入,这一点可能会很有用(即使在两年后)。例如,如果需要
"dog"=[1,0]
和"cat"=[0,1]
,则显式设置:classes=["dog", "cat"]
.h22fl7wq3#
上面的答案已经足够清楚了,但要了解更多信息,您可以检查您的标签是否为分类形式。
下面的代码显示了一个实际的数组label,label.shape
输出显示: