Как конвертировать массив NUMPY в JSON для Google Cloud ML? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть пустой массив (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")

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Вы можете проверить ваши JSON-преобразованные данные с помощью функции type (в вашем случае: type (b)) перед записью в ваш файл для гарантии.А затем просто используя простой код для написания JSON:

    import io
    json.dump(b, io.open(json_file, 'w', encoding='utf-8'))
0 голосов
/ 14 сентября 2018

Документация:

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]}
0 голосов
/ 14 сентября 2018

Для онлайн-прогноза 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...