【问题标题】:How convert numpy array to JSON for Google Cloud ML?如何为 Google Cloud ML 将 numpy 数组转换为 JSON?
【发布时间】:2018-09-14 08:43:16
【问题描述】:

我有一个 numpy 数组 (X_test) 用于在 cloud-ml 中测试我的模型。在线预测需要转成JSON格式。

我的 numpy 数组具有以下格式:

[[    0     0     0 ...  7464  1951  2861]
 [    0     0     0 ...  3395  1996  4999]
 [    0     0     0 ...  5294  9202 17867]
 ...
 [    0     0     0 ...  3506   977  7818]
 [    0     0     0 ...  1421    75   137]
 [    0     0     0 ... 12857 12686  2928]]

我使用下面的代码将其转换为 JSON:

import json
b = X_test.tolist()
json_file = "file.json" 
json.dump(b, codecs.open(json_file, 'w', encoding='utf-8'), sort_keys=True, indent=4)

之后我使用Google Cloud SDK Shell进行云预测并输入下一条命令:

gcloud ml-engine predict --model keras_model --version v1 --json-instances file.json

但是,我得到下一个错误:

ERROR: (gcloud.ml-engine.predict) Input instances are not in JSON format. See "gcloud ml-engine predict --help" for details.

据我了解,我错误地将 numpy 转换为 JSON 以用于 cloud-ml。

如何正确地将 numpy 转换为 JSON 以避免此错误?


UPD:这是帮助我解决此问题的代码:

import json
b = X_test.tolist()
json_file = "file.json"

with open(json_file, 'w', encoding='utf-8') as f:
    for i in b:
        instance = {"input": i}
        json.dump(instance, f , sort_keys=True)
        f.write("\n")

【问题讨论】:

    标签: python json numpy tensorflow google-cloud-platform


    【解决方案1】:

    文档:

    https://cloud.google.com/ml-engine/docs/tensorflow/online-predict#formatting_instances_as_json_strings

    也许使用这样的东西:

    import numpy as np
    import codecs
    
    X_test = np.zeros((5,5))
    print(X_test)
    
    import json
    b = X_test.tolist()
    json_file = "file.json"
    
    f = codecs.open(json_file, 'w', encoding='utf-8')
    
    for i in range(0,len(b)):
        row = b[i]
        instance = {"values" : row, "key": i}
        json.dump(instance, f , sort_keys=True)
        f.write("\n")
    

    file.json 变成:

    {"key": 0, "values": [0.0, 0.0, 0.0, 0.0, 0.0]}
    {"key": 1, "values": [0.0, 0.0, 0.0, 0.0, 0.0]}
    {"key": 2, "values": [0.0, 0.0, 0.0, 0.0, 0.0]}
    {"key": 3, "values": [0.0, 0.0, 0.0, 0.0, 0.0]}
    {"key": 4, "values": [0.0, 0.0, 0.0, 0.0, 0.0]}
    

    【讨论】:

    • 谢谢,我使用了你的答案并更新了它,以便代码工作。
    【解决方案2】:

    对于在线预测,json 需要是每行一个实例。

    例如

        39,State-gov,77516,Bachelors,13,Never-married,Adm-clerical,Not-in-family,White,Male,2174,0,40,United-States,<=50K
    50,Self-emp-not-inc,83311,Bachelors,13,Married-civ-spouse,Exec-managerial,Husband,White,Male,0,0,13,United-States,<=50K
    38,Private,215646,HS-grad,9,Divorced,Handlers-cleaners,Not-in-family,White,Male,0,0,40,United-States,<=50K
    53,Private,234721,11th,7,Married-civ-spouse,Handlers-cleaners,Husband,Black,Male,0,0,40,United-States,<=50K
    

    您可以参考https://github.com/GoogleCloudPlatform/cloudml-samples

    【讨论】:

    • 你能告诉我代码生成的json输出吗?
    【解决方案3】:

    在写入文件以确保之前,您可以使用类型函数(在您的情况下:type(b))检查您的 JSON 转换数据。 然后就用简单的代码写json:

        import io
        json.dump(b, io.open(json_file, 'w', encoding='utf-8'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-25
      • 2020-10-20
      • 2021-12-18
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      相关资源
      最近更新 更多