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

基于MNIST数据集的PyTorch GAN项目报错:'module' object is not callable

PyTorch加载MNIST数据集时TypeError错误解决方法

在使用PyTorch构建生成对抗网络(GAN)并处理MNIST数据集时,遍历DataLoader过程中触发如下错误:

TypeError: 'module' object is not callable

相关代码片段

导入模块:

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.datasets as datasets
from torch.utils.data import DataLoader, Dataset
import torchvision.transforms as transforms
from torch.utils.tensorboard import SummaryWriter

数据集与DataLoader定义:

dataset = datasets.MNIST(root="dataset/",transform = transforms,download = True)
loader = DataLoader(dataset, batch_size = batch_size,shuffle = True)

遍历代码:

for epoch in range(num_epochs):
    for batch_idx, (real, _) in enumerate(loader):
        real = real.view(-1, 784).to(device)

完整报错栈

Traceback (most recent call last):
  File "C:\Users\utkar\PycharmProjects\simpleGAN\main.py", line 57, in <module>
    for batch_idx, (real, _) in enumerate(loader):
  File "C:\Users\utkar\Anaconda3\envs\deeplearning\lib\site-packages\torch\utils\data\dataloader.py", line 628, in __next__
    data = self._next_data()
  File "C:\Users\utkar\Anaconda3\envs\deeplearning\lib\site-packages\torch\utils\data\dataloader.py", line 671, in _next_data
    data = self._dataset_fetcher.fetch(index)  # may raise StopIteration
  File "C:\Users\utkar\Anaconda3\envs\deeplearning\lib\site-packages\torch\utils\data\_utils\fetch.py", line 58, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "C:\Users\utkar\Anaconda3\envs\deeplearning\lib\site-packages\torch\utils\data\_utils\fetch.py", line 58, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "C:\Users\utkar\Anaconda3\envs\deeplearning\lib\site-packages\torchvision\datasets\mnist.py", line 145, in __getitem__
    img = self.transform(img)
TypeError: 'module' object is not callable

错误原因

  • 核心问题:创建MNIST数据集时,transform参数传入的是整个transforms模块,而非可调用的变换实例。数据集在获取样本时会执行self.transform(img),尝试调用传入的对象,但模块本身无法被调用,因此触发错误。

修复方案

需要将具体的变换操作通过transforms.Compose()组合成可调用的变换流水线,最基础的是将图像转换为PyTorch Tensor。修改后的代码如下:

# 定义变换流水线:将图像转为Tensor
transform = transforms.Compose([
    transforms.ToTensor()
])
dataset = datasets.MNIST(root="dataset/", transform=transform, download=True)
loader = DataLoader(dataset, batch_size=batch_size, shuffle=True)

如果需要添加归一化等更多预处理操作,可直接在Compose中扩展:

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))  # 对单通道MNIST图像做归一化
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:10:29