我认为您的问题有两个部分很重要,需要分开;
- 是否可以配置自定义 ImageDataGenerator 数据集?(TLDR;是的)
- 是否可以使用与我的用例匹配的文件路径参数来配置上述内容?(TLDR;是的,但您可能不希望您的目录结构成为目录结构的默认视图,因为其他用户可能也无法使用它)。
是否可以配置自定义 ImageDataGenerator 数据集?
这是一些不完整的 Python 代码,可用于构建自定义数据集。如果您想要这样的解决方案,我会留给您使其正常工作。查看Kedro Github Repo中的示例数据集以获取灵感和从 kedro readthedocs创建自定义数据集的教程。
import tensorflow as tf
from kedro.io.core import AbstractDataSet
class ImageDataGeneratorDataSet(AbstractDataSet):
def __init__(
self,
filepath: str,
load_args: Dict[str, Any] = None,
save_args: Dict[str, Any] = None):
self.filepath = filepath
self.load_args = load_args
self.save_args = save_args
def load(self):
generator = tf.keras.preprocessing.image.ImageDataGenerator(**self.load_args)
return generator.flow_from_directory(self.filepath)
def save(self, data):
raise Exception("Saving with the ImageDataGeneratorDataSet is not supported")
2:是否可以使用与我的用例匹配的文件路径参数来配置上述内容?
虽然我们可以修改上面的内容以接受一些参数并返回不同的迭代器,但如果目录结构不同,这可能会给我们带来问题。这是因为参数化很大程度上依赖于通用约定。
如果您的约定是data/{train/validation}/{dog/cat}/images...
您提取和应用参数的解决方案,则可能与火车/验证和狗/猫的相应顺序相关联,并且可能不适用于可能具有data/{dog/cat}/{train/validation}/images...
.
更好的模式可能是实现一个解决方案(就像我在第一部分中概述的那样),在目录中为每个不同的训练/验证数据注册一个数据集,并在运行时在节点内组合迭代器以创建训练和验证迭代器。
例如,您将拥有数据集 train_cats、train_dogs、validation_cats、validation_dogs。在节点内,您可以将这些迭代器 izip 在一起(请参阅https://stackoverflow.com/a/243902/13341083)。
如果您最终采用这种方法,请提出 PR 并做出贡献 :) 祝您好运