将必应图片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')
报错截图

核心问题
- 代码未定义
im变量:你已经将图片下载到dest路径,但没有执行读取图片的操作,直接调用tensor(im)时找不到对应变量,触发名称错误。 - 图片格式不符合MNIST输入要求:必应搜索返回的图片是3通道RGB/4通道RGBA彩色图,分辨率也不是MNIST要求的28*28单通道灰度图,直接转张量后维度不匹配无法输入模型。
- 缺少必要预处理步骤: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
相关产品推荐
相关产品推荐

