You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将必应图片API获取的PNG转为张量供MNIST模型使用时报错如何解决

报错原因及修复方案

问题背景

尝试将必应图片搜索API返回的PNG文件转换为张量,输入到MNIST机器学习数字识别模型中运行,在转换环节出现报错。

  • 运行环境:GCP上的Jupyter Notebook
  • 开发语言:Python

原代码

key = os.environ.get('AZURE_SEARCH_KEY', 'b3a6daaa4ce340d0a7acb03de1fc94b2')
results = search_images_bing(key, '3')
ims = results.attrgot('contentUrl')
len(ims)

dest = 'images/3.jpg'
download_url(ims[0], dest)

df = pd.DataFrame(tensor(im))
df.style.set_properties(**{'font-size':'1pt'}).background_gradient('Blues')

报错截图

报错截图

核心问题

  1. 代码未定义im变量:你已经将图片下载到dest路径,但没有执行读取图片的操作,直接调用tensor(im)时找不到对应变量,触发名称错误。
  2. 图片格式不符合MNIST输入要求:必应搜索返回的图片是3通道RGB/4通道RGBA彩色图,分辨率也不是MNIST要求的28*28单通道灰度图,直接转张量后维度不匹配无法输入模型。
  3. 缺少必要预处理步骤:MNIST模型输入需要做灰度转换、尺寸缩放、像素值归一化等操作,原代码完全没有相关处理。

修复后代码

import os
import pandas as pd
import torch
from PIL import Image
from fastai.vision.utils import search_images_bing, download_url # 确保已导入对应依赖

key = os.environ.get('AZURE_SEARCH_KEY', 'b3a6daaa4ce340d0a7acb03de1fc94b2')
results = search_images_bing(key, '3')
ims = results.attrgot('contentUrl')

dest = 'images/3.jpg'
download_url(ims[0], dest)

# 新增图片读取与预处理逻辑
im = Image.open(dest).convert('L') # 转为单通道灰度图
im = im.resize((28,28)) # 缩放到MNIST要求的28*28尺寸
im_tensor = torch.tensor(im) # 转为张量

df = pd.DataFrame(im_tensor)
df.style.set_properties(**{'font-size':'1pt'}).background_gradient('Blues')

# 后续输入模型前可补充以下操作适配输入要求
# im_tensor = im_tensor / 255.0 # 像素值归一化到0-1区间
# im_tensor = im_tensor.unsqueeze(0).unsqueeze(0) # 转为[1,1,28,28]格式匹配MNIST输入维度

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:39:05