我目前正在使用TensorFlow提供的数据生成器工作,我希望通过将我的多类分类问题转换为二元分类问题来进行一些测试。
我当前的文件夹结构如下:
data/├── 0/ <-- 包含类别0图像的文件夹├── 1/└── 2/
我目前的加载方式如下:
train_datagen = ImageDataGenerator(rescale=1./255, validation_split=0.5)train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(input_size, input_size), batch_size=batch_size, class_mode='categorical', subset='training')
当然,我也有一个验证子集。不过,我正努力找出如何在不操作实际数据或文件夹结构的情况下,将类别1和2视为单一类别。
我找到了一个方法来选择使用哪些类别,但这是文档中提到的内容。
回答:
希望以下内容能帮助到你:
train_datagen = ImageDataGenerator(rescale=1./255, validation_split=0.5)train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(input_size, input_size), batch_size=batch_size, class_mode='categorical', subset='training')def transform_classes(args): """ data/0/ -> 0 data/1/ -> 1 data/2/ -> 1 """ new_classes = np.array([0,1,1]) x,y = args y = np.argmax(y, axis=1) # 一热编码转换为整数 y = new_classes[y] # 改变目标类别 y = np.eye(2)[y] # 转换回一热编码 return x,ytrain_generator = map(transform_classes, train_generator)
这个答案背后的想法是,train_datagen.flow_from_directory
将返回一个Python生成器,我们可以使用map
来转换它。