import os import matplotlib. pyplot as plt #%matplotlib inline import numpy as np import torch from torch import nn import torch. optim as optim import torchvision #pip install torchvision from torchvision import transforms, models, datasets #https://pytorch.org/docs/stable/torchvision/index.html import imageio import time import warnings warnings. filterwarnings("ignore") import random import sys import copy import json from PIL import Image data_dir = '.\preconditioning/left' #数据预处理 data_tranform ={ 'train': transforms.Compose([ transforms.Resize([224,224]), transforms.RandomRotation(45), transforms.CenterCrop(200), transforms.ToTensor(), transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225]) ]), 'valid': transforms.Compose([ transforms.Resize([224,224]), transforms.ToTensor(), transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225]) ]) } batch_size = 512 image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir),data_tranform[x])for x in ['train','valid']} dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x],batch_size=batch_size,shutil=True)for x in ['train','valid']} dataset_size = {x: len(image_datasets[x])for x in ['train','valid']} class_names = image_datasets['traim'].classes上述代码爆出了以错误,请给出解决方案Traceback (most recent call last): File "D:\我的文档\Python\PythonProject2\TXSB\Lean.py", line 43, in <module> dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x],batch_size=batch_size,shutil=True)for x in ['train','valid']} File "D:\我的文档\Python\PythonProject2\TXSB\Lean.py", line 43, in <dictcomp> dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x],batch_size=batch_size,shutil=True)for x in ['train','valid']} TypeError: __init__() got an unexpected keyword argument 'shutil'
时间: 2025-03-11 12:19:35 浏览: 44
### 错误分析与修正方案
在提供的代码片段中存在两个主要问题:
1. `DataLoader` 的初始化参数错误。具体来说,在创建 `DataLoader` 对象时传递了一个名为 `shutil` 的关键字参数,而该类并没有定义此参数。这导致了 `TypeError: __init__() got an unexpected keyword argument 'shutil'` 错误。
2. 访问字典键名拼写错误。在获取训练集类别名称时使用了 `'traim'` 而不是正确的 `'train'`,这可能会引发后续运行中的其他异常。
#### 修改后的代码如下所示:
```python
import os
import matplotlib.pyplot as plt
import numpy as np
import torch
from torch import nn
import torch.optim as optim
import torchvision
from torchvision import transforms, models, datasets
import imageio
import time
import warnings
warnings.filterwarnings("ignore")
import random
import sys
import copy
import json
from PIL import Image
data_dir = './preconditioning/left'
# 数据预处理配置
data_transforms = {
'train': transforms.Compose([
transforms.Resize([224, 224]),
transforms.RandomRotation(45),
transforms.CenterCrop(200),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
'valid': transforms.Compose([
transforms.Resize([224, 224]),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
}
batch_size = 512
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in ['train', 'valid']}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=batch_size, shuffle=True) for x in ['train', 'valid']} # 将 shutil 改为 shuffle
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'valid']}
class_names = image_datasets['train'].classes # 更正 traom -> train
```
通过以上修改可以解决当前遇到的问题并使程序正常工作[^1]。
阅读全文
相关推荐



















