我遵循了以下关于识别手写数字的教程: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 教程模型?)。
我不知道我在哪里搞砸了,任何帮助将不胜感激。提前致谢!