0

如何在 Azure ML 上的 Python 脚本中访问从 Web 服务发送的全局参数(“GlobalParameters”)?

我试过了:

if 'GlobalParameters' in globals():
    myparam = GlobalParameters['myparam']

但没有成功。

编辑:示例

就我而言,我正在通过 Web 服务发送一个声音文件(作为样本列表)。我还想发送一个采样率和每个样本的位数。我已经成功配置了 Web 服务(我认为)来获取这些参数,所以 GlobalParameters 现在看起来像:

"GlobalParameters": {
     "sampleRate": "44100",
     "bitsPerSample": "16",
}

但是,我无法从 Python 脚本访问这些变量,无论是 asGlobalParameters["sampleRate"]还是 as sampleRate。可能吗?它们存储在哪里?

4

3 回答 3

1

根据我们对您的问题的理解,这里可能有一个错误的概念,即 Azure ML 参数不是“全局参数”,事实上它们只是与特定模块相关的参数替换。因此,在您提到的整个实验中,没有可访问的全局参数。在这种情况下,我们认为下面的实验完成了您的要求:

  1. 请在实验中添加“输入数据”模块,并添加 csv 格式的数据。然后对于数据单击参数以创建 Web 服务参数。添加将从客户端应用程序传递的数据中替换的 CSV 数据。IE 在此处输入图像描述

  2. 请添加一个“Execute Python”模块并将“Enter Data”输出连接到“Execute Python”输入1。添加 python 代码以获取 dataframe1 并将其添加到 python 列表中。一旦你把它放在一个列表中,你就可以在你的 python 代码中的任何地方使用它。

  3. Python 代码片段

def azureml_main(dataframe1 = 无,dataframe2 = 无):

import pandas as pd
global_list = []

for g in dataframe1["Col3"]:
    global_list.append(g)

df_global = pd.DataFrame(global_list)        
print('Input pandas.DataFrame:\r\n\r\n{0}'.format(df_global))        
return [df_global]

在此处输入图像描述

发布实验后,您可以在下面的“数据”部分中添加新值,并用新值替换实验中的“输入数据”值。

data =  {

        "Inputs": {

                "input1":
                {
                    "ColumnNames": ["Col1", "Col2", "Col3"],
                    "Values": [ [ "0", "value", "0" ], [ "0", "value", "0" ], ]
                },        },
            "GlobalParameters": {
        "Data": "1,sampleRate,44500\\n2,bitsPerSample,20",
}
}

在此处输入图像描述 如果这有意义,请随时告诉我们。

于 2015-08-13T06:39:07.903 回答
0

GlobalParameters参数不能在 Python 脚本中使用。它用于覆盖其他模块中的某些参数。

例如,如果您使用“拆分数据”模块,您会发现一个将参数转换为 Web 服务参数的选项:

将参数转换为 Web 服务参数

单击该按钮后,将出现一个标题为“Web 服务参数”的新部分。在那里,您可以将默认参数名称更改为您选择的名称之一。

更改 Web 服务参数名称

如果您将项目部署为 Web 服务,则可以通过将其放在 GlobalParameters 参数中来覆盖该参数:

"GlobalParameters": {
     "myFraction": 0.7
}

我希望这能把事情弄清楚一点。

于 2019-01-29T13:31:29.183 回答
0

尽管无法在 Python 脚本中使用 GlobalParameters(请参阅我之前的答案),但是您可以破解/滥用 Python 脚本的第二个输入来传递其他参数。在我的示例中,我称它们为元数据参数。

首先,我补充说:

  • 名称为“realdata”的Web 服务输入模块(用于您的真实数据)
  • 一个名称为“元数据”的Web 服务输入模块(我们将滥用这个模块将参数传递给我们的 Python)。
  • 名称为“computedMetadata”的Web 服务输出模块

按如下方式连接模块:

在此处输入图像描述

如您所见,我还添加了一个真实数据集(餐厅评级)以及一个虚拟元数据 csv(手动输入数据)模块。

在本手册数据中,您必须预定义元数据参数,就像它们是带有标题的 csv 文件一样,并且只有一行来保存数据:

在此处输入图像描述

在示例中,sampleRate 和 bitsPerSample 都设置为 0。

然后,我的 Python 脚本将该假 csv 作为元数据接收,对其进行一些虚拟计算并将其作为列名返回:

import pandas as pd

def azureml_main(realdata = None, metadata = None):

    theSum = metadata["sampleRate"][0] + metadata["bitsPerSample"][0]

    outputString = "The sum of the sampleRate and the bitsPerSecond is " + str(theSum)

    print(outputString)

    return pd.DataFrame([outputString])

然后我将其发布为 Web 服务并使用 Node.js 调用它,如下所示:

httpreq.post('https://ussouthcentral.services.azureml.net/workspaces/xxx/services/xxx', {
    headers: {
        Authorization: 'Bearer xxx'
    },
    json: {
    "Inputs": {
        "realdata": {
            "ColumnNames": [
                "userID",
                "placeID",
                "rating"
            ],
            "Values": [
                [
                    "100",
                    "101",
                    "102"
                ],
                [
                    "200",
                    "201",
                    "202"
                ]
            ]
        },
        "metadata": {
            "ColumnNames": [
                "sampleRate",
                "bitsPerSample"
            ],
            "Values": [
                [
                    44100,
                    16
                ]
            ]
        }
    },
    "GlobalParameters": {}
}

}, (err, res) => {
    if(err) return console.log(err);
    console.log(JSON.parse(res.body));
});

输出符合预期:

{ Results:
   { computedMetadata:
      { type: 'table',
        value:
         { ColumnNames: [ '0' ],
           ColumnTypes: [ 'String' ],
           Values:
            [ [ 'The sum of the sampleRate and the bitsPerSecond is 44116' ] ] } } } }

祝你好运!

于 2019-01-29T14:28:13.093 回答