Azure ML实验批量Web服务调用失败,输出扩展无效

时间:2018-05-07 17:37:17

标签: c# rest azure azure-machine-learning-studio

我有一个Azure webjob,它通过HttpRequests调用ML训练实验,利用ML webportal中生成的代码:

var request = new BatchExecutionRequest()
            {
                Inputs = new Dictionary<string, AzureBlobDataReference>() {
                    {
                        "input1",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = _connectionString,
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/{trainingDataFileName}"
                        }
                    },
                },

                Outputs = new Dictionary<string, AzureBlobDataReference>() {
                    {
                        "output1",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = "azureStorageConnectionString",
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/Model_2018421.ilearner"
                        }
                    },
                },

                GlobalParameters = new Dictionary<string, string>()
                {
                }
            };

但是,请求失败并显示以下消息:

  

blob参考:   实验/ experimentId / TenantId / Model_2018421.ilearner   文件扩展名无效或丢失。支持的文件扩展名   对于此输出类型是:\\&#34; .csv,.tsv,.arff \\&#34;

我对此感到非常困惑,因为如果我希望受过训练的模型能够使用&#34; .ilearner&#34;作为模型的文件扩展名。

我已经看到this question询问利用DataFactory的同一错误,还有this question on datascience.stackexchange。没有人有任何线索,答案或其他跟进。

对我失踪的任何见解都将不胜感激!

1 个答案:

答案 0 :(得分:0)

对于那些正在寻找你的人而言,不要过度思考它&#34;一天中的时刻:

我需要提供两个输出blob文件引用:

var request = new BatchExecutionRequest()
            {
                Inputs = new Dictionary<string, AzureBlobDataReference>() {
                    {
                        "input1",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = _connectionString,
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/{trainingDataFileName}.csv"
                        }
                    },
                },

                Outputs = new Dictionary<string, AzureBlobDataReference>() {
                    {
                        "output1",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = _connectionString,
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/{outputFileNameCsv}.csv"
                        }
                    },
                    {
                        "output2",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = _connectionString,
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/{outputFileNameIlearner}.ilearner"
                        }
                    },
                },

                GlobalParameters = new Dictionary<string, string>()
                {
                }
            };

美国英语中有一句老话说不做假设,我假设第二个输出是批处理操作中使用的可选参数。由于我实际上并没有从每个调用中查找多个结果,因此我认为可以安全地删除第二个输出参数。

TL / DR:将所有参数保留在webservice门户&#34;消费&#34;选项卡生成,并确保第一个是.csv文件引用。