访问Azure ML Python脚本中的GlobalParameters

时间:2015-08-05 16:27:16

标签: python azure azure-machine-learning-studio

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

我试过了:

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

但没有成功。

编辑:示例

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

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

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

3 个答案:

答案 0 :(得分:1)

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

  1. 请在实验中添加“输入数据”模块,并以csv格式添加数据。然后,对于Data,单击参数以创建Web服务参数。添加将从客户端应用程序传递的数据中替换的CSV数据。即 enter image description here

  2. 请添加“执行Python”模块并将“输入数据”输出连接到“执行Python”输入1。添加python代码以获取dataframe1并将其添加到python列表中。一旦你在列表中有它,你可以在你的python代码中的任何地方使用它。

  3. Python代码段

  4. def azureml_main(dataframe1 = None,dataframe2 = None):

    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]
    

    enter image description here

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

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

    enter image description here 如果有意义,请随时告诉我们。

答案 1 :(得分:0)

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

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

turn parameter into web service parameter

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

change web service parameter name

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

"GlobalParameters": {
     "myFraction": 0.7
}

我希望这可以使事情变得清晰起来。

答案 2 :(得分:0)

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

首先,我添加:

  • 一个名称为“ realdata”的 Web服务输入 模块(用于偏离课程的实际数据)
  • 名为 Web服务输入 模块(我们将滥用此模块将参数传递给Python)。
  • 一个名称为“ computedMetadata”的 Web服务输出 模块

按如下所示连接模块:

enter image description here

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

在本手册数据中,您将必须预定义元数据参数,就像它们是具有标头且仅一行以保存数据的csv:

enter image description here

在此示例中,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' ] ] } } } }

祝你好运!