构建PyTorch数据集时,为何test_data报'int' object is not callable错误?
问题原因分析
你的代码里存在两个关键问题,其中拼写错误直接触发了报错:
1. 变量名拼写错误(核心报错原因)
在拆分数据集的代码行中,你把test_label拼写成了tets_label:
train_data, test_data, train_label, tets_label = train_test_split(T_data, T_label, test_size= .2)
后续创建测试数据集时,你调用了未定义的test_label:
test_data = TensorDataset(test_data, test_label)
如果你的运行环境中之前恰好存在一个名为test_label的整数变量,就会触发"int object is not callable"错误——因为TensorDataset需要接收张量类型的输入,而你传入了一个整数,Python会尝试将其当作可调用对象处理,进而报错。
2. 冗余的初始数据(非报错但可优化)
你初始化的data = np.array([[1,1]])和label = np.array([2])会被后续循环的内容重复添加(循环范围包含了i=1的情况),可以直接初始化空数组避免数据冗余:
data = np.empty((0, 2), int) label = np.empty((0,), int)
修正后的代码
import numpy as np import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import DataLoader, TensorDataset from sklearn.model_selection import train_test_split # 初始化空数组避免冗余 data = np.empty((0, 2), int) label = np.empty((0,), int) for i in range(-5000, 5001, 1): data = np.append(data, [[i, i]], axis=0) label = np.append(label, [i + i]) # 转换为张量 T_data = torch.tensor(data).float() T_label = torch.tensor(label).long() # 修正变量名拼写错误 train_data, test_data, train_label, test_label = train_test_split(T_data, T_label, test_size=.2) # 转换为PyTorch数据集 train_data = TensorDataset(train_data, train_label) test_data = TensorDataset(test_data, test_label)
内容的提问来源于stack exchange,提问作者Rainbow
相关产品推荐
相关产品推荐

