Нейронная сеть Watson Studio не дает правильный выходной формат - PullRequest
0 голосов
/ 11 февраля 2019

Я следовал следующему руководству по распознаванию рукописных цифр: https://www.youtube.com/watch?v=Gcn7l37Qhng. Однако в нем ничего не говорится о развертывании, поэтому я сам развернул WebService, основываясь на других руководствах и примерах IBM.

Я правильно заполнил учетные данные и попытался преобразовать мои самодельные изображения размером 28x28 в соответствующие полезные данные, используя следующий фрагмент кода:

import urllib3, requests, json
from PIL import Image
import numpy as np

img = Image.open(filepath)

img = np.array(img.getdata())
img=img[:,1]

img_to_predict = 1.0 - (img.reshape(28, 28, 1)/255)

img_to_predict = img_to_predict.astype("float32").tolist()
scoring_payload = {"values": [img_to_predict]}

Полезная нагрузка создается с помощью следующего фрагмента кода:

payload_scoring = scoring_payload

response_scoring = requests.post('https://us-south.ml.cloud.ibm.com/v3/wml_instances/****/deployments/****/online', json=payload_scoring, headers=header)
print("Scoring response")
print(json.loads(response_scoring.text))

Я ожидал получить вероятности с самыми высокими значениями, соответствующими классам правильных чисел.Я нарисовал 0 и 1 в краске и отправил изображения в веб-сервис.Вместо ожидаемых значений высокой вероятности при индексах 0 и 1, я получаю, что эти json отвечает практически без различий (пробовал и с другими числами, но с теми же результатами).

Оценка ответа {'fields': ['предсказание'], 'значения': [[0,024692464619874954, 0,251592218875885, 0,1783675253391266, 0,07483808696269989, 0,10192563384771347, 0,09394937008619308 * 0,06621485930 * 1010) 1010391) 1010291010291321321482514825132132148251321481011011481011481011481011302705705251705291305291481705251705251705251705705705255251481481481481481481481481481481481481481481481485251485256255256255256255256255256255255255255305255255255255255258379279372)))))))>))) *1015* {'fields': ['Forecast'], 'values'{'fields': ['предсказание'], 'значения': [[0,024196961894631386, 0,2504081130027771, 0,18672968447208405, 0,078950896859169, 0,09495671093463898, 0,09053520858287811, 0,06100 * 101 * 210 * 1010) 1010282 028 = 1010,130 * 028% (2130))))).попытался развернуть другую модель из примера потока потока машинного обучения, но я получил те же бессмысленные результаты.Ответы службы не соответствуют классам отправленных изображений должным образом.

Я пытался использовать готовую модель нейронной сети с заданным значением ввода https://github.com/pmservice/wml-sample-models/blob/master/scikit-learn/hand-written-digits-recognition/test-data/mnist-scikit-learn-test-payload.json,, но это единственные рабочие данные, которые ямог бы взять меня за руку.

Я пытался использовать тестовые данные набора данных mnist, но те же результаты ( Deep Learning - Как проверить модель учебника MNIST на WML? ).

Я понятия не имею, где я все испортил, любая помощь будет высоко ценится.Заранее спасибо!

1 Ответ

0 голосов
/ 12 февраля 2019

Хорошо, оказалось, что я испортил формат ввода, данные не нуждаются ни в нормализации, ни в инверсии.Все, что мне нужно было сделать, это создать инвертированные файлы png и изменить часть

img_to_predict = 1.0 - (img.reshape(28, 28, 1)/255)

на

img_to_predict = img.reshape(28,28,1)

Я могу отправлять свои фотографии, а также некоторые образцы цифр из набора тестовых данных mnistна мой развернутый сервис.

...