AWS 机器学习 RealTimePredictor returns C# 中的 UnknownoperationException
AWS Machine Learning RealTimePredictor returns UnknownoperationException in C#
使用 Visual Studio 和 AWS .NET V 3.0。
我正在尝试执行实时预测操作,并验证基本设置是否有效,我首先执行有效的 GetMLModel() 和 returns 端点(文档中的某处是提到使用该结果作为服务端点,但它与控制台中列出的相同)。有状态 "READY",到目前为止一切顺利。
异常发生在 "Prediction P = RTP.Predict(Data)" 下面的行中。数据包含一个包含所有预测值的字典。
错误: 发出请求时出错,错误代码为 UnknownOperationException,Http 状态代码为 BadRequest。服务没有返回更多错误信息。
public static APIResult GetRealTimePrediction(Dictionary<string, string> Data, string PayloadJSON = null) {
AmazonMachineLearningConfig MLConfig = new AmazonMachineLearningConfig();
MLConfig.RegionEndpoint = Amazon.RegionEndpoint.USEast1;
MLConfig.Validate();
AmazonMachineLearningClient MLClient = new AmazonMachineLearningClient("xxx", "xxx", MLConfig);
GetMLModelResponse MLMOdelResp = MLClient.GetMLModel("xxx"); // <-- WORKS
MLConfig.ServiceURL = MLMOdelResp.EndpointInfo.EndpointUrl;
Console.WriteLine(MLConfig.ServiceURL);
MLConfig.Validate();
Amazon.MachineLearning.Util.RealtimePredictor RTP = new Amazon.MachineLearning.Util.RealtimePredictor(MLClient, "xxx");
Prediction P = RTP.Predict(Data); // <----------------EXCEPTION HERE
}
(明显把xxx替换成相关值):)
原来是这一行:
MLConfig.ServiceURL = MLMOdelResp.EndpointInfo.EndpointUrl;
例 MLConfig.RegionEndpoint 被重置。尽管文档表明 RegionEndpoint 可以从 ServiceURL 确定(我很确定我读过),但在 RTP.Predict(Data) 调用之前需要再次设置 RegionEndpoint。
一旦我明白了这一点,我就能够将代码缩减为这样,以防其他人需要帮助。我想在配置中添加太多信息并不是一件好事,就像 AWS 一样。 NET 库似乎可以自行解决所有这些问题。
public static APIResult GetRealTimePrediction(Dictionary<string, string> Data, string PayloadJSON = null) {
AmazonMachineLearningConfig MLConfig = new AmazonMachineLearningConfig();
MLConfig.RegionEndpoint = Amazon.RegionEndpoint.USEast1;
MLConfig.Validate(); // Just in case, not really needed
AmazonMachineLearningClient MLClient = new AmazonMachineLearningClient("xxx", "xxx", MLConfig);
Amazon.MachineLearning.Util.RealtimePredictor RTP = new Amazon.MachineLearning.Util.RealtimePredictor(MLClient, "xxx");
Prediction P = RTP.Predict(Data);
}
使用 Visual Studio 和 AWS .NET V 3.0。
我正在尝试执行实时预测操作,并验证基本设置是否有效,我首先执行有效的 GetMLModel() 和 returns 端点(文档中的某处是提到使用该结果作为服务端点,但它与控制台中列出的相同)。有状态 "READY",到目前为止一切顺利。
异常发生在 "Prediction P = RTP.Predict(Data)" 下面的行中。数据包含一个包含所有预测值的字典。
错误: 发出请求时出错,错误代码为 UnknownOperationException,Http 状态代码为 BadRequest。服务没有返回更多错误信息。
public static APIResult GetRealTimePrediction(Dictionary<string, string> Data, string PayloadJSON = null) {
AmazonMachineLearningConfig MLConfig = new AmazonMachineLearningConfig();
MLConfig.RegionEndpoint = Amazon.RegionEndpoint.USEast1;
MLConfig.Validate();
AmazonMachineLearningClient MLClient = new AmazonMachineLearningClient("xxx", "xxx", MLConfig);
GetMLModelResponse MLMOdelResp = MLClient.GetMLModel("xxx"); // <-- WORKS
MLConfig.ServiceURL = MLMOdelResp.EndpointInfo.EndpointUrl;
Console.WriteLine(MLConfig.ServiceURL);
MLConfig.Validate();
Amazon.MachineLearning.Util.RealtimePredictor RTP = new Amazon.MachineLearning.Util.RealtimePredictor(MLClient, "xxx");
Prediction P = RTP.Predict(Data); // <----------------EXCEPTION HERE
}
(明显把xxx替换成相关值):)
原来是这一行:
MLConfig.ServiceURL = MLMOdelResp.EndpointInfo.EndpointUrl;
例 MLConfig.RegionEndpoint 被重置。尽管文档表明 RegionEndpoint 可以从 ServiceURL 确定(我很确定我读过),但在 RTP.Predict(Data) 调用之前需要再次设置 RegionEndpoint。
一旦我明白了这一点,我就能够将代码缩减为这样,以防其他人需要帮助。我想在配置中添加太多信息并不是一件好事,就像 AWS 一样。 NET 库似乎可以自行解决所有这些问题。
public static APIResult GetRealTimePrediction(Dictionary<string, string> Data, string PayloadJSON = null) {
AmazonMachineLearningConfig MLConfig = new AmazonMachineLearningConfig();
MLConfig.RegionEndpoint = Amazon.RegionEndpoint.USEast1;
MLConfig.Validate(); // Just in case, not really needed
AmazonMachineLearningClient MLClient = new AmazonMachineLearningClient("xxx", "xxx", MLConfig);
Amazon.MachineLearning.Util.RealtimePredictor RTP = new Amazon.MachineLearning.Util.RealtimePredictor(MLClient, "xxx");
Prediction P = RTP.Predict(Data);
}