1、准备
引包:torchvision,包含transforms、model(在这指的就是网络的模型)、datasets(对数据的处理)
注:.compose,表示代码的顺序执行
2、制作好数据源
对数据的操作(包含裁剪、旋转等)不会储存在本地
data_transforms = {
'train':
transforms.Compose([
transforms.Resize([96, 96]),
transforms.RandomRotation(45),#随机旋转,-45到45度之间随机选
transforms.CenterCrop(64),#从中心开始裁剪
transforms.RandomHorizontalFlip(p=0.5),#随机水平翻转 选择一个概率概率
transforms.RandomVerticalFlip(p=0.5),#随机垂直翻转
transforms.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1),#参数1为亮度,参数2为对比度,参数3为饱和度,参数4为色相
transforms.RandomGrayscale(p=0.025),#概率转换成灰度率,3通道就是R=G=B
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])#均值,标准差
]),
'valid':
transforms.Compose([
transforms.Resize([64, 64]),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
}
transform.resize:改变图像的大小。注意,卷积网络中要求每一张图像大小都是一样的,不同图像的大小会影响网络的迭代速度
transforms.Normalize:对数据集的标准化操作「R,G,B」
设置datasets
batch_size = 128
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']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'valid']}
class_names = image_datasets['train'].classes
datasets.ImageFolder(路径,数据名):图像数据的文件夹
with open('cat_to_name.json', 'r') as f:
cat_to_name = json.load(f)
读取标签实际对应的名字
2、加载models中提供的模型,并且直接用训练的好权