TypeError Traceback (most recent call last) Input In [37], in <cell line: 57>() 52 return num_correct / len(test_loader.dataset) 56 # 转换数据格式 ---> 57 train_dataset = TensorDataset(train_norm_vec, y_train) 58 val_dataset = TensorDataset(valid_norm_vec, y_valid) 59 test_dataset = TensorDataset(test_norm_vec, y_test) File ~\AppData\Roaming\Python\Python38\site-packages\torch\utils\data\dataset.py:189, in TensorDataset.__init__(self, *tensors) 188 def __init__(self, *tensors: Tensor) -> None: --> 189 assert all(tensors[0].size(0) == tensor.size(0) for tensor in tensors), "Size mismatch between tensors" 190 self.tensors = tensors File ~\AppData\Roaming\Python\Python38\site-packages\torch\utils\data\dataset.py:189, in <genexpr>(.0) 188 def __init__(self, *tensors: Tensor) -> None: --> 189 assert all(tensors[0].size(0) == tensor.size(0) for tensor in tensors), "Size mismatch between tensors" 190 self.tensors = tensors TypeError: 'int' object is not callable
时间: 2024-03-17 09:43:04 浏览: 39
这个错误通常是因为你尝试将整数当作函数来调用。根据你提供的代码,可能是因为在构建 `TensorDataset` 对象时,传入的参数不是 `Tensor` 类型,而是整数类型。你可以检查一下输入的 `train_norm_vec`、`y_train`、`valid_norm_vec`、`y_valid`、`test_norm_vec`、`y_test` 是否都是 `Tensor` 类型的数据,或者是否有其他的类型错误。
另外,你的 `train_loader`、`val_loader` 和 `test_loader` 都是使用 `DataLoader` 构建的,但是在 `test` 函数中,你却直接使用 `test_dataset` 进行预测。这可能会导致数据类型不一致的问题。建议在 `test` 函数中也使用 `DataLoader` 对象来进行预测,例如:
```python
def test(model, test_loader):
model.eval()
num_correct = 0
for inputs, labels in test_loader:
inputs, labels = inputs.to(device), labels.to(device)
outputs = model(inputs)
_, predicted = torch.max(outputs.data, 1)
num_correct += (predicted == labels).sum().item()
return num_correct / len(test_loader.dataset)
test_loader = DataLoader(test_dataset, batch_size=16, shuffle=False)
test_acc = test(model, test_loader)
```