深度学习用服务器显卡、CPU或者显卡做训练时,pytorch框架分类预训练参数解读修改经验分享

1.类值num_classes修改

常见英文num_classes修改成自己做多少的分类,model.py还是train.py、predicte.py文件里如有都需要修改。

2.训练优先使用GPU

下面这语句是经常看到

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    print("using {} device.".format(device))

3.数据的预处理(训练集和测试集)

data_transform = {
        "train": transforms.Compose([transforms.RandomResizedCrop(224),
                                     transforms.RandomHorizontalFlip(),
                                     transforms.ToTensor(),
                                     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]),

transforms.RandomResizedCrop:#将图片用随机裁剪方法裁剪成224*224
transforms.RandomHorizontalFlip():#在水平方向随机翻转
transforms.ToTensor():#将它转化成tnesor
transforms.Normalize:#将数据进行标准化处理

4.数据的加载

train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=1, shuffle=False, sampler=None, 
           batch_sampler=None, num_workers=0, collate_fn=None, 
           pin_memory=False, drop_last=False, timeout=0, 
           worker_init_fn=None, *, prefetch_factor=2, 
           persistent_workers=False) 

train_dataset:必须首先使用数据集构造 DataLoader 类。一开始命为训练集文件夹被它处理过。
batch_size: 批量加载的样本数。
shuffle :每个epoch是否重新整理数据,将训练模型的数据集进行打乱的操作。
sampler :指的是可选的 torch.utils.data.Sampler 类实例。采样器定义了检索样本的策略,顺序或随机或任何其他方式。使用采样器时应将 shuffle 设置为 false。
batch_sampler :批处理级别。
num_workers :加载数据所需的子进程数。
collate_fn :将样本整理成批次。Torch 中可以进行自定义整理。
pin_memory:拷贝数据到 CUDA Pinned Memory。

5.训练基本设置参数

lr:学习率,一般设置有0.1,0.01,0.001,0.0001,0.000002等,根据损失和正确率调整
epochs:迭代次数
优化器也可以换
补:
epoch:训练时,所有训练数据集都训练过一次。

batch_size:在训练集中选择一组样本用来更新权值。1个batch包含的样本的数目,通常设为2的n次幂,常用的包括64,128,256。 网络较小时选用256,较大时选用64。

iteration​:训练时,1个batch训练图像通过网络训练一次​(一次前向传播+一次后向传播),每迭代一次权重更新一次;测试时,1个batch测试图像通过网络一次​(一次前向传播)。所谓iterations就是完成一次epoch所需的batch个数

假如 数据集有 50000 张训练图片,10000 张测试图片。现在选择 Batch Size = 256 对模型进行训练。

每个 Epoch 要训练的图片数量:50000
训练集具有的 Batch 个数:50000 / 256 = 195 + 1 = 196
每个 Epoch 需要完成的 Batch 个数:196
每个 Epoch 具有的 Iteration 个数:196
每个 Epoch 中发生模型权重更新的次数:196
训练 10 代后,模型权重更新的次数:196 * 10 = 1960

不同代的训练,其实用的是同一个训练集的数据。第 1 代和第 10 代虽然用的都是训练集的五万张图片,但是对模型的权重更新值却是完全不同的。因为不同代的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch框架中,深度学习模型的训练轮数通常由以下几个因素决定: 1. 数据集大小:如果数据集较大,可能需要更多的训练轮数才能充分利用数据集的信息。 2. 模型复杂度:如果模型非常复杂,可能需要更多的训练轮数来学习和调整模型的参数。 3. 训练目标:如果任务比较复杂,需要更多的训练轮数来找到最优解。 4. 训练算法:不同的训练算法可能需要不同的训练轮数。例如,使用梯度下降法训练轮数通常会比较多;而使用一些优化算法(如Adam),可能需要较少的训练轮数。 在具体编写代码,我们可以通过设置一个预定义的最大训练轮数或者使用一些早停策略来控制训练的总轮数。下面是一个基于PyTorch框架的代码示例: ```python import torch import torch.nn as nn import torch.optim as optim # 定义模型 model = YourModel() # 定义损失函数 criterion = nn.CrossEntropyLoss() # 定义优化器 optimizer = optim.SGD(model.parameters(), lr=0.01) # 定义训练轮数 num_epochs = 10 # 准备数据集并进行训练 for epoch in range(num_epochs): for inputs, labels in train_loader: # 前向传播 outputs = model(inputs) loss = criterion(outputs, labels) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() # 在每个epoch结束后进行验证或测试 with torch.no_grad(): # 进行验证或测试的代码 # 打印训练信息 print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}") # 完成训练后进行保存模型等操作 ``` 在上述代码中,我们通过设置`num_epochs`来控制训练的总轮数,然后在每个epoch中进行模型的前向传播、损失计算、反向传播和优化。在每个epoch结束后,可以进行验证或测试,并打印训练信息。完成所有训练轮数后,可以进行保存模型等操作。 需要注意的是,这只是一个示例代码,实际的训练轮数需要根据具体任务和模型进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值