第三课 torchvision

第三课 torchvision

torchvision作用:训练数据下载,数据预处理,模型下载

  1. 数据增强

增加数据量,更高效的利用数据

  • 翻转
  • 旋转
  • 缩放

训练数据

transforms.Compose([
    transforms.RandomRotation(45),  #随机旋转(-45~45)
    transforms.CenterCrop(224),     #从中心开始裁剪
    transforms.RandomHorizantalFlip(p=0.5)#以一定概率随机水平翻转
    transforms.RandomVerticalFlip(p=0.5),   #以一定概率随机垂直翻转
    transforms.ColorJitter(brightness=0.2,contrast=0.1,satutration=0.1,hue=0.1)#亮度,对比度,饱和度,色相
    transforms.RandomGrayscale(p=0.025)#以一定概率转化成灰度图
    transforms.ToTensor(),
    transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])  #均值,标准差(由他人计算得到的)
]
)

验证数据

ransforms.Compose([
    transforms.Resize(256),  
    transforms.CenterCrop(224),     #从中心开始裁剪
    transforms.ToTensor(),
    transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])  #均值,标准差(由他人计算得到的)
]
)

可能图片的通道顺序还要改变 ( H ∗ W ∗ C ) → ( C ∗ H ∗ W ) (H*W*C)\rightarrow (C*H*W) (HWC)(CHW)img=img.transpose((2,0,1))

构建数据集

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']}
class_names = image_datasets['train'].classes

迁移学习

卷积层用于特征提取。全连接层用于分类,所以卷积层可用于迁移学习

例子

# 是否对卷积层参数进行冻结,用于加速网络训练
def set_parameter_requires_grad(model, feature_extracting):
    if feature_extracting:
        for param in model.parameters():
            param.requires_grad = False

model_ft = models.resnet152(pretrained=use_pretrained)
set_parameter_requires_grad(model_ft, feature_extract)
num_ftrs = model_ft.fc.in_features
model_ft.fc = nn.Sequential(nn.Linear(num_ftrs, 102),      #重新修改全连接层
                                    nn.LogSoftmax(dim=1))

# 优化器设置
optimizer_ft = optim.Adam(params_to_update, lr=1e-2)   #只优化待更新参数
scheduler = optim.lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)#学习率每7个epoch衰减成原来的1/10
#最后一层已经LogSoftmax()了,所以不能nn.CrossEntropyLoss()来计算了,nn.CrossEntropyLoss()相当于logSoftmax()和nn.NLLLoss()整合
criterion = nn.NLLLoss()

# 保存权重
best_moedl_wts = copy.deepcopy(model.state_dict())

Resnet

在这里插入图片描述

其中虚线部分会做一个1*1的卷积使特征图翻倍(使用c个卷积核就会得到c个特征图)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值