Нейронная сеть Watson Studio не дает правильный выходной формат

Я следовал следующему руководству по распознаванию рукописных цифр: 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 отвечают практически без различий (пробовал и с другими числами, но с теми же результатами).

Подсчет очки ответа {'поля': ['предсказание'], 'ценность': [[0.024692464619874954, 0,251592218875885, +0,1783675253391266, 0,07483808696269989, +0,10192563384771347, +0,09394937008619308, +0,06621485948562622, 0,13631191849708557, +0,033091891556978226, +0,03901601955294609]]} набранного ответа {'поля': [" предсказание "], 'ценности': [[+0,024196961894631386, +0,2504081130027771, +0,18672968447208405, 0,078950896859169, 0,09495671093463898, +0,09053520858287811, +0,06100791320204735, +0,1424102932214737, +0,03167588636279106, 0,039128340780735016]]}

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

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

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

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

1 ответ

Решение

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

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

часть к

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

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

Другие вопросы по тегам