pytorch一步一步在VGG16上训练自己的数据集

准备数据集及加载,ImageFolder

在很多机器学习或者深度学习的任务中,往往我们要提供自己的图片。也就是说我们的数据集不是预先处理好的,像mnist,cifar10等它已经给你处理好了,更多的是原始的图片。比如我们以猫狗分类为例。在data文件下,有两个分别为train和val的文件夹。然后train下是cat和dog两个文件夹,里面存的是自己的图片数据,val文件夹同train。这样我们的数据集就准备好了。
在这里插入图片描述
ImageFolder能够以目录名作为标签来对数据集做划分,下面是pytorch中文文档中关于ImageFolder的介绍:
在这里插入图片描述

#对训练集做一个变换
train_transforms = transforms.Compose([
    transforms.RandomResizedCrop(224),		#对图片尺寸做一个缩放切割
    transforms.RandomHorizontalFlip(),		#水平翻转
    transforms.ToTensor(),					#转化为张量
    transforms.Normalize((.5, .5, .5), (.5, .5, .5))	#进行归一化
])
#对测试集做变换
val_transforms = transforms.Compose([
    transforms.Resize(256),
    transforms.RandomResizedCrop(224),
    transforms.ToTensor(),
    transforms.Normalize((.5, .5, .5), (.5, .5, .5))
])

tr
### 加载和配置预训练VGG16模型 在PyTorch中,`torchvision.models` 提供了一个方便的方法来加载预训练VGG16 模型。以下是详细的说明以及代码示例。 #### 使用 `torchvision.models.vgg16` 导入预训练模型 可以通过设置参数 `pretrained=True` 来加载已经在 ImageNet 数据集预训练好的 VGG16 模型[^3]。这一步会自动下载并初始化模型权重。 ```python import torchvision.models as models # 加载预训练VGG16模型 vgg16_pretrained = models.vgg16(pretrained=True) print(vgg16_pretrained) ``` 如果需要对模型进行微调,则可以按照以下方式操作: #### 微调 VGG16 模型 对于某些特定任务(如迁移学习),可能只需要调整最后一层全连接层以适应新的分类类别数。在这种情况下,可以替换掉默认的最后一层,并冻结其他层的参数以减少计算开销。 ```python # 替换最后一层全连接层 (假设目标类别数量为num_classes) num_features = vgg16_pretrained.classifier[-1].in_features num_classes = 10 # 假设有10个类别的新任务 vgg16_pretrained.classifier[-1] = torch.nn.Linear(num_features, num_classes) # 冻结特征提取部分的参数 for param in vgg16_pretrained.features.parameters(): param.requires_grad_(False) print(vgg16_pretrained) ``` #### 手动加载自定义权重文件 当无法直接使用 `torchvision.models.vgg16(pretrained=True)` 或者希望加载来自 Caffe 的转换权重时,可以选择手动加载权重文件[^1]。具体步骤如下所示: ```python from collections import OrderedDict import torch state_dict_path = 'path_to_caffemodel_converted.pth' # 转换成PyTorch格式后的Caffe权重路径 custom_state_dict = torch.load(state_dict_path) new_state_dict = OrderedDict() for k, v in custom_state_dict.items(): name = k.replace('module.', '') # 如果保存的是DataParallel模型则需去掉'module.' new_state_dict[name] = v model = models.vgg16() # 创建未初始化的VGG16实例 model.load_state_dict(new_state_dict) # 将自定义权重加载到模型中 ``` #### 配置优化器与损失函数 完成上述步骤之后,还需要配置合适的优化算法、学习率调度机制以及其他超参数以便于后续训练过程顺利开展[^4]。 ```python device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 移动模型至GPU/CPU设备 model.to(device) # 定义交叉熵损失函数 criterion = torch.nn.CrossEntropyLoss() # Adam作为优化器 optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, model.parameters()), lr=0.001) # 设置每5轮迭代后将学习率乘以gamma因子(这里是0.5) lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.5) ``` ---
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值