我想使用ImageDataGenerator
的flow_from_directory
方法来生成回归模型的训练数据,其中目标值可以是-1到1之间的任何浮点数。flow_from_directory
有一个”class_mode”参数,其描述如下:
class_mode: “categorical”、”binary”、”sparse”或None之一。默认值为”categorical”。决定返回的标签数组的类型:”categorical”将是二维的独热编码标签,”binary”将是一维的二进制标签,”sparse”将是一维的整数标签。
这些值中我应该选择哪一个?似乎没有一个真正适合…
回答:
截至目前(2017年1月21日的最新版本Keras),flow_from_directory
只能以以下方式工作:
-
您需要按以下方式组织目录结构:
包含图像的目录\ 第一个标签\ 第一个标签的第一张图片 第一个标签的第二张图片 第一个标签的第三张图片 ... 第二个标签\ 第二个标签的第一张图片 第二个标签的第二张图片 第二个标签的第三张图片 ... ...
flow_from_directory
返回固定大小的批次,格式为(图片, 标签)
。
如您所见,它只能用于分类情况,并且文档中提供的所有选项仅指定类别提供给分类器的方式。但是,有一个巧妙的技巧可以使flow_from_directory
在回归任务中派上用场:
-
您需要按以下方式组织目录结构:
包含图像的目录\ 第一个值(例如 -0.95423\)\ 第一个值的第一张图片 第一个值的第二张图片 第一个值的第三张图片 ... 第二个值(例如 -0.9143242\)\ 第二个值的第一张图片 第二个值的第二张图片 第二个值的第三张图片 ... ...
-
您还需要有一个列表
list_of_values = [第一个值, 第二个值, ...]
。然后您的生成器定义如下:def regression_flow_from_directory(flow_from_directory_gen, list_of_values): for x, y in flow_from_directory_gen: yield x, list_of_values[y]
对于flow_from_directory_gen
来说,设置class_mode='sparse'
是至关重要的,这才能使其正常工作。当然,这有点麻烦,但它确实有效(我使用过这个解决方案 :))