2017-08-04 42 views
0

我正在尝试在谷云ml引擎中创建批量预测作业。不幸的是,我总是得到同样的错误:如何在gcloud ml-engine中上传批量预测的输入文件?

{ 
    insertId: "wr85wwg6shs9ek" 
    logName: "projects/tensorflow-test-1-168615/logs/ml.googleapis.com%2Ftest_job_23847239" 
    receiveTimestamp: "2017-08-04T16:07:29.524193256Z" 
    resource: { 
     labels: { 
      job_id: "test_job_23847239"  
      project_id: "tensorflow-test-1-168615"  
      task_name: "service"  
     } 
     type: "ml_job"  
    } 
    severity: "ERROR" 
    textPayload: "TypeError: decoding Unicode is not supported" 
    timestamp: "2017-08-04T16:07:29.524193256Z" 
} 

我在Java中创建的文件,并将其上传到一个桶用下面的代码:

BufferedImage bufferedImage = ImageIO.read(new URL(media.getUrl())); 
int[][][] imageMatrix = convertToImageToMatrix(bufferedImage); 
String imageString = matrixToString(imageMatrix); 
String inputContent = "{\"instances\": [{\"inputs\": " + imageString + "}]}"; 
byte[] inputBytes = inputContent.getBytes(Charset.forName("UTF-8")); 
Blob inputBlob = mlInputBucket.create(media.getId().toString() + ".json", inputBytes, "application/json"); 
inputPaths.add("gs://" + Properties.getCloudBucketNameInputs() + "/" + inputBlob.getName()); 

在这段代码中,我下载的图像,转换它以uint8矩阵形式将矩阵格式化为json字符串。文件被创建并存在于存储桶中。我也验证过,json文件是有效的。

在接下来的步骤,我收集所有创建的文件,并开始预测工作:

GoogleCloudMlV1PredictionInput input = new GoogleCloudMlV1PredictionInput(); 
input.setDataFormat("TEXT"); 
input.setVersionName("projects/" + DatastoreOptions.getDefaultProjectId() + "/models/" + Properties.getMlEngineModelName() + "/versions/" + Properties.getMlEngineModelVersion()); 
input.setRegion(Properties.getMlEngineRegion()); 
input.setOutputPath("gs://" + Properties.getCloudBucketNameOutputs() + "/" + jobId); 
input.setInputPaths(inputPaths); 

GoogleCloudMlV1Job job = new GoogleCloudMlV1Job(); 
job.setJobId(jobId); 
job.setPredictionInput(input); 
engine.projects().jobs().create("projects/" + DatastoreOptions.getDefaultProjectId() , job).execute(); 

最后,作业被创建,但结果是从一开始的一个。

我也试着用gcloud sdk开始工作,但结果是一样的。但是,当我修改文件以删除instances对象并匹配online prediction的正确格式时,它起作用(为了使其正常工作,我需要从输入中删除大部分行,因为在线预测的有效负载配额) 。

我使用object detection的训练有素的宠物模型。我创建的一个输入文件可以在here找到。

我在做什么错在这里?

回答