3.2 迁移学习(transfer learning)

本文介绍了迁移学习在深度学习中的应用,特别是使用PyTorch实现。内容包括迁移学习的两种场景——微调网络和固定特征提取器,以及如何使用预训练模型进行训练。文中详细讲解了数据预处理、训练模型的步骤,并提供了训练过程中的学习率调整策略。通过实例展示了如何在PyTorch中加载和微调预训练的ResNet模型,并进行了模型评估。
摘要由CSDN通过智能技术生成
%matplotlib inline

3.2 迁移学习(transfer learning)

关于迁移学习的一些基础知识可以参考王晋东的迁移学习手册:https://max.book118.com/html/2018/0902/5144341211001312.shtm

迁移学习的意义何在?

在实践中,很少有人从头开始训练整个卷积网络(随机初始化),因为拥有足够大小的数据集是相对罕见的。相反,通常在非常大的数据集(例如ImageNet,其包含具有1000个类别的120万个图像)上预先训练ConvNet,然后使用ConvNet初始化我们要训练的网络或者作为网络的固定参数。

迁移学习的两种使用场景:

1.微调网络。使用已经训练好的网络,如在imagenet 1000数据集上训练的网络,去初始化我们要训练的网络,而不是采用随机初始化。

2.作为固定特征提取器。将要训练网络的前面的层,除了最后的全连接层,全都用已经训练好的网络的这些层的参数固定住,只有最后的全连接层利用随机初始化参数的方式去训练。

下面是pytorch提供的pre-trained models:

在这里插入图片描述

class torch.optim.lr_scheduler.LambdaLR(optimizer,lr_lambda,last_epoch=-1)
将每一个参数组的学习率设置为初始学习率lr的某个函数倍.当last_epoch=-1时,设置初始学习率为lr.

参数:

optimizer(Optimizer对象)–优化器

lr_lambda(是一个函数,或者列表(list)):当是一个函数时,需要给其一个整数参数,使其计算出一个乘数因子,用于调整学习率,通常该输入参数是epoch数目或者是一组上面的函数组成的列表

last_epoch(int类型):最后一次epoch的索引,默认为-1.

from __future__ import print_function, division

import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim import lr_scheduler
import numpy as np
import torchvision
from torchvision import datasets, models, transforms
import matplotlib.pyplot as plt
import time
import os
import copy

plt.ion()   # interactive mode

下载数据包

使用torchvision和torch.utils.data包来加载数据

要解决的问题是训练一个模型来对蚂蚁和蜜蜂进行分类,每一类有120个训练图像,和75个验证图像,这里,我们使用迁移学习来训练这个模型。

这个数据集是imagenet下的一个子集。

transforms.RandomResizedCrop:
将给定图像随机裁剪为不同的大小和宽高比,然后缩放所裁剪得到的图像为制定的大小(即先随机采集,然后对裁剪得到的图像缩放为同一大小).该操作的含义:即使只是该物体的一部分,我们也认为这是该类物体,比如 猫的图片别裁剪缩放后,仍然认为这是一个猫.

torchvision.transforms.RandomHorizontalFlip:
以给定的概率随机水平翻转给定的PIL图像,参数:p(float) - 图像被翻转的概率。默认值为0.5

torchvision.transforms.Resize(size, interpolation=2):
如果size是类似(h,w),则输出大小将与此匹配;如果只有一个整数size,则图像的较小边缘将与此数字匹配,如果高度>宽度,则图像将重新缩放为(size * height / width, size)

torchvision.transforms.CenterCrop(size):
在中心裁剪给定的PIL图像,如果size是一个整数,则裁剪尺寸为(size,size)

PIL 读出来的image格式是图片的(width, height)。

ImageFolder 在pytorch Dataset下面的一个类,ImageFolder假设所有的文件按文件夹保存好,每个文件夹下面存贮同一类别的图片,文件夹的名字为分类的名字。

ImageFolder(root,transform=None,target_transform=None,loader=default_loader)

root : 在指定的root路径下面寻找图片 ;

transform: 对PIL Image进行转换操作,transform 输入是loader读取图片返回的对象 ;

target_transform :对label进行变换 ;

loader: 指定加载图片的函数,默认操作是读取PIL image对象

os.path.join(data_dir,x):把路径和文件名合在一起;

data_transforms = {
   
    
    'train' : transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])
    ]),
    'val' :  transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])
    ]),
}

data_dir = '/home/dhb/jupyter notebook/data/hymenoptera_data/'
image_datasets = {
   x:datasets.ImageFolder(os.path.join(data_dir,x
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Online learning(在线学习)指的是通过互联网或其他远程技术进行教育和学习的方式。它已经成为当今社会中非常普遍的学习方式,尤其是在全球范围内的疫情期间,许多学校和机构都转向了在线学习模式。学生可以通过在线学习平台获得课程内容、参与讨论、提交作业和进行考试。 迁移学习Transfer learning)是指将已经学习过的知识或技能应用到一个新的领域或任务中。这种学习方式允许个体在面对新的挑战或情境时能够更快更有效地应对,因为他们可以将已有的经验和知识转移到新的情境中。迁移学习可以帮助个体更好地适应变化、提高适应能力和解决问题的能力。 Online learning迁移学习之间存在一定的联系。通过在线学习,学生可以在一个虚拟的环境中学习各种知识和技能,这些学习成果可以在日常生活或工作中进行迁移应用。例如,学习一门外语的技能可以在旅行时得到应用;学习数据分析的方法可以在工作中帮助提高工作效率。因此,通过在线学习获得的知识和技能都可以通过迁移学习的方式应用到不同的场景中,并帮助个体更好地适应变化,提高自身的综合素质。 总体来说,Online learning迁移学习都是现代社会重要的学习方式和策略,它们为个体提供了更多的学习机会和技能应用场景,有助于个体提高自身的学习能力和适应能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值