为何直接调用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
相关产品推荐
相关产品推荐

