如何在WML中测试MNIST教程模型?Watson Studio部署后测试咨询
嘿,很高兴看到你成功把MNIST的CNN模型部署到WML了!我来帮你理清测试自定义图像的具体步骤——分输入数据准备和触发评分引擎两部分来说:
一、模型输入的格式要求
你的CNN模型在训练时用的是标准化后的MNIST数据:28x28的灰度图像,像素值被归一化到0-1区间(通常是除以255),并且被展平成784个元素的一维数组。所以测试时不能直接上传PNG/JPG这类图像文件,必须先把你的图像预处理成和训练数据格式一致的数值数组,再包装成WML评分接口接受的JSON结构。
具体预处理步骤:
- 把目标图像转换成28x28的灰度图(如果是彩色图,先转灰度通道)
- 将每个像素值做归一化处理(要和你训练时的逻辑完全一致,比如除以255)
- 把28x28的二维数组展平成784个元素的一维数组
- 包装成WML要求的JSON格式,典型结构如下:
{ "input_data": [ { "values": [ [0.0, 0.01, 0.03, ..., 0.98] // 这里是784个归一化后的像素值 ] } ] }
你可以在WML部署页面的「输入」标签下查看模型的输入schema,确保JSON结构和字段完全匹配。
二、触发评分引擎的测试方法
有三种常用的测试方式,你可以根据场景选择:
1. Watson Studio界面直接测试
这是最快捷的验证方式:
- 进入你的WML部署详情页面,切换到「测试」选项卡
- 在输入框中粘贴准备好的JSON数据
- 点击「评分」按钮,就能立刻看到模型的预测结果(比如数字类别和对应概率)
2. 通过REST API调用测试
如果需要自动化测试或者集成到其他应用,用API调用更灵活:
- 先从部署页面获取两个关键信息:评分URL和API密钥(在「凭证」标签下)
- 用curl命令发送POST请求的例子:
curl -X POST \ -u "apikey:<你的API密钥>" \ -H "Content-Type: application/json" \ -d '{"input_data": [{"values": [[0.0, 0.01, ..., 0.98]]}]}' \ <你的评分URL> - 用Python的requests库调用的例子:
import requests api_key = "<你的API密钥>" scoring_url = "<你的评分URL>" # 获取认证token token_response = requests.post( "https://iam.cloud.ibm.com/identity/token", data={"apikey": api_key, "grant_type": "urn:ibm:params:oauth:grant-type:apikey"} ) access_token = token_response.json()["access_token"] headers = { "Content-Type": "application/json", "Authorization": f"Bearer {access_token}" } payload = { "input_data": [ { "values": [[0.0, 0.01, ..., 0.98]] } ] } response = requests.post(scoring_url, json=payload, headers=headers) print(response.json())
3. 在Watson Studio Notebook中测试
如果你习惯用Notebook,可以一站式完成图像加载、预处理和模型调用:
- 先安装并导入WML客户端库:
!pip install ibm-watson-machine-learning from ibm_watson_machine_learning import APIClient - 配置客户端并关联你的部署:
wml_credentials = { "apikey": "<你的API密钥>", "url": "<你的WML实例URL>" } client = APIClient(wml_credentials) client.set.default_space("<你的空间ID>") deployment_id = "<部署ID>" - 加载并预处理你的图像(以PIL库为例):
from PIL import Image import numpy as np # 加载图像并转灰度、调整尺寸 img = Image.open("your_mnist_image.png").convert("L") img = img.resize((28, 28)) # 归一化并展平 img_array = np.array(img) / 255.0 flattened_array = img_array.flatten().tolist() - 调用模型获取评分:
payload = {"input_data": [{"values": [flattened_array]}]} predictions = client.deployments.score(deployment_id, payload) print(predictions)
最后提醒下:预处理步骤必须和训练模型时完全一致(比如是否反转图像颜色、归一化方式等),否则模型的预测结果可能会偏离预期哦!
内容的提问来源于stack exchange,提问作者ishida330
相关产品推荐
相关产品推荐

