我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Pytorch卷积神经网络迁移学习的目标及好处

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Pytorch卷积神经网络迁移学习的目标及好处

前言

在深度学习训练的过程中,随着网络层数的提升,我们训练的次数,参数都会提高,训练时间相应就会增加,我们今天来了解迁移学习

一、经典的卷积神经网络

在pytorch官网中,我们可以看到许多经典的卷积神经网络。

附官网链接:https://pytorch.org/

这里简单介绍一下经典的卷积神经发展历程

1.首先可以说是卷积神经网络的开山之作Alexnet(12年的夺冠之作)这里简单说一下缺点 卷积核大,步长大,没有填充层,大刀阔斧的提取特征,容易忽略一些重要的特征

2.第二个就是VGG网络,它的卷积核大小是3*3,有一个优点是经过池化层之后,通道数翻倍,可以更多的保留一些特征,这是VGG的一个特点

在接下来的一段时间中,出现了一个问题,我们都知道,深度学习随着训练次数的不断增加,效果应该是越来越好,但是这里出现了一个问题,研究发现随着VGG网络的不断提高,效果却没有原来的好,这时候人们就认为,深度学习是不是只能发展到这里了,这时遇到了一个瓶颈。

3.接下来随着残差网络(Resnet)的提出,解决了上面这个问题,这个网络的优点是保留了原有的特征,假如经过卷积之后提取的特征还没有原图的好,这时候保留原有的特征,就会解决这一问题,下面就是resnet网络模型

这是一些训练对比:

二、迁移学习的目标

首先我们使用迁移学习的目标就是用人家训练好的权重参数,偏置参数,来训练我们的模型。

三、好处

深度学习要训练的数据量是很大的,当我们数据量少时,我们训练的权重参数就不会那么的好,所以这时候我们就可以使用别人训练好的权重参数,偏置参数来使用,会使我们的模型准确率得到提高

四、步骤

迁移学习大致可以分为三步

1.加载模型

2.冻结层数

3.全连接层

五、代码

这里使用的是resnet152

import torch
import torchvision as tv
import torch.nn as nn
import torchvision
import torch.nn.functional as F
import torchvision.transforms as transforms
import torch
from torch.utils import data
from torch import optim
from torch.autograd import Variable
model_name='resnet'
featuer_extract=True
train_on_gpu=torch.cuda.is_available()
if not train_on_gpu:
    print("没有gpu")
else :
    print("是gpu")
devic=torch.device("cuda:0" if torch.cuda.is_available() else 'cpu')
teature_extract=True
def set_paremeter_requires_grad(model,featuer_extract):
    if featuer_extract:
        for parm in model.parameters():
            parm.requires_grad=False   #不做训练
def initialize_model(model_name,num_classes,featuer_extract,use_pretrained=True):
    model_ft = None
    input_size = 0
    if model_name=="resnet":
        model_ft=tv.models.resnet152(pretrained=use_pretrained)#下载模型
        set_paremeter_requires_grad(model_ft,featuer_extract) #冻结层数
        num_ftrs=model_ft.fc.in_features #改动全连接层
        model_ft.fc=nn.Sequential(nn.Linear(num_ftrs,num_classes),
                                  nn.LogSoftmax(dim=1))
        input_size=224 #输入维度
    return  model_ft,input_size
model_ft,iput_size=initialize_model(model_name,10,featuer_extract,use_pretrained=True)
model_ft=model_ft.to(devic)
params_to_updata=model_ft.parameters()
if featuer_extract:
    params_to_updata=[]
    for name,param in model_ft.named_parameters():
        if param.requires_grad==True:
            params_to_updata.append(param)
            print("\t",name)
else:
    for name,param in model_ft.parameters():
        if param.requires_grad==True:
            print("\t",name)
opt=optim.Adam(params_to_updata,lr=0.01)
loss=nn.NLLLoss()
if __name__ == '__main__':
    transform = transforms.Compose([
        # 图像增强
        transforms.Resize(1024),#裁剪
        transforms.RandomHorizontalFlip(),#随机水平翻转
        transforms.RandomCrop(224),#随机裁剪
        transforms.ColorJitter(brightness=0.5, contrast=0.5, hue=0.5), #亮度
        # 转变为tensor 正则化
        transforms.ToTensor(), #转换格式
        transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))  # 归一化处理
    ])
    trainset = tv.datasets.CIFAR10(
        root=r'E:\桌面\资料\cv3\数据集\cifar-10-batches-py',
        train=True,
        download=True,
        transform=transform
    )
    trainloader = data.DataLoader(
        trainset,
        batch_size=8,
        drop_last=True,
        shuffle=True,  # 乱序
        num_workers=4,
    )
    testset = tv.datasets.CIFAR10(
        root=r'E:\桌面\资料\cv3\数据集\cifar-10-batches-py',
        train=False,
        download=True,
        transform=transform
    )
    testloader = data.DataLoader(
        testset,
        batch_size=8,
        drop_last=True,
        shuffle=False,
        num_workers=4
    )
    for epoch in range(3):
        running_loss=0
        for index,data in enumerate(trainloader,0):
            inputs, labels = data
            inputs = inputs.to(devic)
            labels = labels.to(devic)
            inputs, labels = Variable(inputs), Variable(labels)
            opt.zero_grad()
            h=model_ft(inputs)
            loss1=loss(h,labels)
            loss1.backward()
            opt.step()
            h+=loss1.item()
            if index%10==9:
                avg_loss=loss1/10.
                running_loss=0
                print('avg_loss',avg_loss)
            if index%100==99 :
                correct=0
                total=0
                for data in testloader:
                    images,labels=data
                    outputs=model_ft(Variable(images.cuda()))
                    _,predicted=torch.max(outputs.cpu(),1)
                    total+=labels.size(0)
                    bool_tensor=(predicted==labels)
                    correct+=bool_tensor.sum()
                print('1000张测试集中的准确率为%d   %%'%(100*correct/total))

以上就是Pytorch卷积神经网络迁移学习的目标及好处的详细内容,更多关于Pytorch卷积神经网络迁移的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Pytorch卷积神经网络迁移学习的目标及好处

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Pytorch卷积神经网络迁移的目标及好处是什么

本文小编为大家详细介绍“Pytorch卷积神经网络迁移的目标及好处是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pytorch卷积神经网络迁移的目标及好处是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录