如何在Azure ML上的Python脚本中访问从Web服务发送的全局参数(" GlobalParameters")?
我试过了:
if 'GlobalParameters' in globals():
myparam = GlobalParameters['myparam']
但没有成功。
就我而言,我通过网络服务发送声音文件(作为样本列表)。我还想发送采样率和每个样本的位数。我已经成功配置了Web服务(我认为)以获取这些参数,因此GlobalParameters现在看起来像:
"GlobalParameters": {
"sampleRate": "44100",
"bitsPerSample": "16",
}
但是,我无法从Python脚本访问这些变量,无论是GlobalParameters["sampleRate"]
还是sampleRate
。可能吗?它们存放在哪里?
答案 0 :(得分:1)
基于我们对您的问题的理解,这里可能有一个错误的概念,即Azure ML参数不是“全局参数”,事实上它们只是与特定模块相关的参数替换。所以在影响中,没有全局参数可以在您提到的整个实验中访问。在这种情况下,我们认为下面的实验可以满足您的要求:
请在实验中添加“输入数据”模块,并以csv格式添加数据。然后,对于Data,单击参数以创建Web服务参数。添加将从客户端应用程序传递的数据中替换的CSV数据。即
请添加“执行Python”模块并将“输入数据”输出连接到“执行Python”输入1。添加python代码以获取dataframe1并将其添加到python列表中。一旦你在列表中有它,你可以在你的python代码中的任何地方使用它。
Python代码段
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]
发布实验后,您可以在“数据”中添加新值:“”,下面的部分将使用您在实验中替换“输入数据”值的新值。
data = {
"Inputs": {
"input1":
{
"ColumnNames": ["Col1", "Col2", "Col3"],
"Values": [ [ "0", "value", "0" ], [ "0", "value", "0" ], ]
}, },
"GlobalParameters": {
"Data": "1,sampleRate,44500\\n2,bitsPerSample,20",
}
}
答案 1 :(得分:0)
GlobalParameters 参数不能在Python脚本中使用。用于覆盖其他模块中的某些参数。
例如,如果您使用“拆分数据”模块,则会找到一个将参数转换为Web服务参数的选项:
单击后,将出现一个标题为“ Web服务参数”的新部分。在那里,您可以将默认参数名称更改为您选择的参数之一。
如果将项目部署为Web服务,则可以通过将其放在GlobalParameters参数中来覆盖该参数:
"GlobalParameters": {
"myFraction": 0.7
}
我希望这可以使事情变得清晰起来。
答案 2 :(得分:0)
尽管无法在Python脚本中使用GlobalParameters(请参阅my previous answer),但是您可以破解/滥用Python脚本的第二个输入来传递其他参数。在我的示例中,我称它们为元数据参数。
首先,我添加:
按如下所示连接模块:
如您所见,我还添加了一个真实的数据集(餐厅评分),作为虚拟元数据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' ] ] } } } }
祝你好运!