4

我正在尝试torch.utils.data.DataLoader在 AzureML 中对 a 进行一些自定义操作,但无法将其直接从我的实例化azureml.core.Datastore

ws = Workspace( # ... etc ... )
ds = Datastore.get(ws, datastore_name='my_ds')
am = ds.as_mount()

# HOW DO I GET base_path, data_file from am?

dataloader = DataLoader(
        ListDataset(base_path, data_file), #... etc...
    )

的值为am.path()"$AZUREML_DATAREFERENCE_my_ds" 但我无法弄清楚如何从pathlib.Path构造函数到ListDataset. 我尝试过的事情包括Path(am.path())Path(os.environ[am.path()])它们似乎不起作用。

很明显,有一些答案,因为:

script_params = {
    '--base_path': ds.as_mount(), 
    '--epochs': 30,  
    '--batch_size' : 16,  
    '--use_cuda': 'true'
}
torch = PyTorch(source_directory='./',
                        script_params=script_params,
                        compute_target=compute_target,
                        entry_script='train.py',
                        pip_packages=packages,
                        use_gpu=True) 

似乎创造了一个合法的对象。

4

2 回答 2

2

您或许可以尝试使用DataPath 类。它公开了诸如path_on_datastore可能是您正在寻找的路径之类的属性。

从您的 DataReference 对象(即变量)构造此类am;你可以使用 create_from_data_reference()方法。

例子:

ds = Datastore.get(ws, datastore_name='my_ds')
am = ds.as_mount()

dp = DataPath().create_from_data_reference(am)

base_path = dp.path_on_datastore

于 2019-10-22T15:45:00.933 回答
1

上面的代码为我生成了一个错误,在 DataPath 实例化之后删除了括号,如下所示使代码运行。

ds = Datastore.get(ws, datastore_name='my_ds')
am = ds.as_mount()

dp = DataPath.create_from_data_reference(am)

base_path = dp.path_on_datastore

感谢您的代码片段,非常有用!

于 2020-03-26T09:10:01.243 回答