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

为何直接调用transforms.ToTensor()报错,赋值变量后却正常?

问题原因解析

这是因为transforms.ToTensor是一个类,不是普通函数,两种调用方式的本质完全不同:

  • 错误写法transforms.ToTensor([c]):你这是在调用类的构造方法__init__创建实例,但ToTensor的构造方法不需要任何参数,你传入[c]导致参数数量不匹配,因此抛出TypeError。

  • 正确写法ttensor = transforms.ToTensor():这一步是创建ToTensor类的实例(构造方法无参数,符合要求),之后的ttensor(c)是调用这个实例的__call__方法——这个方法才是专门用来接收并处理输入图像数据的,所以能正常运行。

简单来说,你得先把类实例化成一个可调用的对象,再用这个对象去处理数据,不能直接给类的构造方法传数据。

代码逻辑拆解

import numpy as np
import torch
from torchvision import transforms

c = np.random.randn(128,128)
# 错误:直接给ToTensor类的构造方法传数据,构造方法不需要参数
d = transforms.ToTensor([c])

# 正确:先实例化ToTensor(构造方法无参),再用实例调用__call__处理数据
ttensor = transforms.ToTensor()
e = ttensor(c)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:03:12