在处理图像和keras ImageDataGenerator时应使用哪个kedro数据集?我知道有ImageDataset,但是图像数量太大,无法容纳在内存中。 keras ImageDataGenerator真正需要的只是图像数据集的本地文件夹位置,格式为:
data/
train/
dogs/
dog001.jpg
dog002.jpg
...
cats/
cat001.jpg
cat002.jpg
...
validation/
dogs/
dog001.jpg
dog002.jpg
...
cats/
cat001.jpg
cat002.jpg
...
可以使用指定数据位置的参数,但是我认为数据的适当位置应该是数据目录。有没有一种简单的方法可以在“数据目录”中指定此数据位置?
答案 0 :(得分:1)
如何在parameters.yml
中设置路径,然后将其读取为ImageDataGenerator的输入。看起来可能像这样:
train_dogs_location: data/train/dogs/
根据最佳示例修改上述示例。
您也可以考虑为conf/base/globals.yml
文件中的所有数据集设置全局路径。例如,对于您的根数据文件夹。
答案 1 :(得分:1)
您认为问题中有两个部分需要分开;
这里有一些不完整的python代码,可用于构建自定义数据集。如果您想要这样的解决方案,我会把它留给您使用,以使其正常工作。在Kedro Github Repo中查看示例数据集以获取灵感,并从kedro readthedocs中获取tutorial on creating custom datasets。
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")
虽然我们可以修改上述内容以接受一些参数并返回不同的迭代器,但是如果目录结构不同,这可能会给我们带来问题。这是因为参数化很大程度上依赖于通用约定。
如果您的约定为data/{train/validation}/{dog/cat}/images...
,则提取和应用参数的解决方案可能会与训练/验证和狗/猫的各自顺序相关联,并且可能不适用于拥有约定的其他用户的data/{dog/cat}/{train/validation}/images...
。
可能会有更好的模式:实施解决方案(如我在第一部分中概述的那样),在目录中为每个不同的训练/验证数据注册一个数据集,并在运行时将迭代器合并到您的节点来创建训练和验证迭代器。
例如,您将拥有数据集train_cats,train_dogs,validation_cats,validation_dogs。在节点内,您可以将这些迭代器压缩在一起(请参见https://stackoverflow.com/a/243902/13341083)。
如果您最终采用这种方法,请提高PR并做出贡献:)祝您好运