0

我遵循了以下关于识别手写数字的教程: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,并将图像发送到 Web 服务。我得到的不是 0 和 1 索引处的预期高概率值,而是这些 json 响应几乎没有差异(也尝试了其他数字,但结果相同)。

Scoring response {'fields': ['prediction'], 'values': [[0.024692464619874954, 0.251592218875885, 0.1783675253391266, 0.07483808696269989, 0.10192563384771347, 0.09394937008619308, 0.06621485948562622, 0.13631191849708557, 0.033091891556978226, 0.03901601955294609]]} Scoring response {'fields': [' prediction'], 'values': [[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 数据集的测试数据,但结果相同(深度学习 - 如何在 WML 上测试 MNIST 教程模型?)。

我不知道我在哪里搞砸了,任何帮助将不胜感激。提前致谢!

4

1 回答 1

0

好吧原来我搞砸了输入格式,数据不需要归一化,也不需要反转。我所要做的就是创建倒置的 png 文件,然后更改

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

部分到

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

我可以将我的图片和一些来自 mnist 测试数据集的示例数字发送到我部署的服务。

于 2019-02-12T10:52:08.740 回答