You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Azure Blob存储的图像加载到Keras ImageDataGenerator中

解决方法

你现有代码存在两处核心错误,修正后即可正常调用flow_from_directory读取数据集:

1. 先修正流水线代码的问题

  • 你重复定义了PythonScriptStep的inputs参数,会导致后一个定义覆盖前一个,raw_data输入直接失效
  • 你构造FileDataset时用了单文件通配符*.jpg,会丢失原有的Train/classX目录层级结构,而flow_from_directory强依赖按类别分目录的结构,需要调整DataPath的匹配范围

修正后的流水线代码:

# 直接匹配整个ds目录,完整保留原有层级结构
datastore_path = DataPath(datastore, "ds/")
ds = Dataset.File.from_files(path=datastore_path)

pipeline_train = PythonScriptStep(
    name='02 Train Model', 
    source_directory=".",
    script_name='train.py',
    # 合并inputs参数,禁止分开写两次
    inputs=[ds.as_named_input('raw_data').as_download(), dataFolder],
    outputs=[datafolder],
    arguments=['--datafolder', datafolder],
    runconfig=self.run_config
)
steps = [pipeline_train]
pipeline = Pipeline(workspace=self.ws, steps=steps)

2. 修正train.py的路径获取逻辑

as_download()模式下的FileDataset会自动下载到计算节点的本地路径,不需要通过输出参数args.datafolder拼接,直接读取输入数据集的本地路径即可:

# 获取流水线作业传入的参数
import argparse
from azureml.core import Run
from tensorflow.keras.preprocessing.image import ImageDataGenerator

parser = argparse.ArgumentParser()
parser.add_argument('--datafolder', type=str)
args = parser.parse_args()

run_ = Run.get_context()
# 直接获取下载后的数据集本地根目录
raw_data_dir = run_.input_datasets['raw_data']

b_size = 10
size = 100

train_gen = ImageDataGenerator()
# 拼接训练集路径,下载的目录结构和datastore中完全一致
train_path = f"{raw_data_dir}/Train"
train_images = train_gen.flow_from_directory(
    train_path,
    target_size=(size,size),
    color_mode="rgb",
    batch_size=b_size,
    shuffle=True,
    class_mode="categorical"
)

补充说明

  • 不能直接把Azure Dataset对象传入ImageDataGenerator,它仅支持本地路径或可迭代的数据生成器,必须先将数据集下载/挂载到计算节点本地路径再调用
  • 如果数据集体积较大,可以把as_download()换成as_mount(),无需全量下载即可直接访问路径,train.py代码不需要做任何修改

内容的提问来源于stack exchange,提问作者user2179550

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:54:05