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

使用MNIST数据集时Matplotlib无法显示训练集图像问题

MNIST图像无法用Matplotlib显示的解决方法

可能的原因及对应修复

1. 未指定灰度颜色映射

MNIST是灰度图,plt.imshow默认使用彩色映射,可能导致图像显示异常(比如看似空白)。给imshow加上cmap='gray'参数即可正确显示:

plt.imshow(data[0][0].view(28,28), cmap='gray')
plt.show()

2. Tensor与Matplotlib的兼容性问题

部分环境下直接传入PyTorch Tensor会有显示问题,转成NumPy数组更稳妥:

plt.imshow(data[0][0].view(28,28).numpy(), cmap='gray')
plt.show()

3. Matplotlib后端不支持GUI显示

如果是在无GUI环境(比如远程服务器、Docker容器)运行,默认后端无法弹出窗口,有两种解决方式:

  • 临时切换到交互式后端(需确保环境支持):
import matplotlib
matplotlib.use('TkAgg') # 或Qt5Agg等可用后端
  • 直接保存图像到本地文件:
plt.imshow(data[0][0].view(28,28), cmap='gray')
plt.savefig('mnist_sample.png')

4. Jupyter环境需开启内嵌显示

如果用Jupyter Notebook,要先加魔法命令让图像内嵌显示:

%matplotlib inline
import matplotlib.pyplot as plt

修复后的完整代码

import torch
import torchvision
import matplotlib.pyplot as plt
from torchvision import transforms, datasets

train = datasets.MNIST("", train=True, download=True,
                       transform=transforms.Compose([transforms.ToTensor()]))

test = datasets.MNIST("", train=False, download=True,
                       transform=transforms.Compose([transforms.ToTensor()]))

trainset = torch.utils.data.DataLoader(train, batch_size=10, shuffle=True)
testset = torch.utils.data.DataLoader(test, batch_size=10, shuffle=True)

for data in trainset:
    print(data)
    break

x, y = data[0][0], data[1][0]
print(y)

# 正确显示灰度图像,添加标签标题更直观
plt.imshow(x.view(28, 28), cmap='gray')
plt.title(f"Label: {y}")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:40:23