【pytorch】微调技术

2023-11-02

前言

训练神经网络是一件非常耗费时间的事情,其需要大量的算力以及大量的数据。显然从头开始训练并不是明智之选,利用好已有的资源才是明智之选。

微调技术

图像识别笼统地可以分为两步:

  1. 提取图片的特征,此部分往往通过CNN卷积神经网络实现。
  2. 根据提取的特征,进行分类,此部分往往通过全连接神经网络来实现。
  • 识别一只猫和识别一只狗有没有类似的地方呢?
    答案是有的,它们在提取图片特征都是非常相似的。
    考虑CNN中卷积的作用,它就是在识别不同的边缘,因此无论是猫,还是狗,图片特征都是类似的,但是如何根据这些特征来学习才是关键。

预训练模型

在图像识别中,有许多经典的神经网络,例如vgg,resnet等,对于这些经典的网络,pytorch都是提供了训练模型好的模型的。这些某些都是在ImageNet上训练好的,有较高的精确度。利用训练好的某些进行图片特征的提取,就能够大大减少训练的耗时。

代码实现

import torch
from torch import nn
from torch.nn import functional as F
from torchsummary import summary

net = torchvision.models.resnet18(pretrained=True)
    
net.fc = nn.Linear(net.fc.in_features, 5)
nn.init.xavier_uniform_(net.fc.weight)
summary(net , input_size=(3,224,224) , device="cpu")

lr = 0.0005
loss = nn.CrossEntropyLoss(reduction="mean")

params_1x = [param for name, param in net.named_parameters()
    if name not in ["fc.weight", "fc.bias"]]
trainer = torch.optim.SGD([{'params': params_1x},{'params': net.fc.parameters(),'lr': lr * 80}],lr=lr, weight_decay=0.001)
epochs = 15

其实非常简单,甚至比自己完全手动定义神经网络都简单,因为它完全不需要自己定义网络结构。
但是这些与训练模型并不是能够直接拿过来就能使用的,还需要一些修改:

  1. 修改最后的类别数
    在ImageNet中,其最后的全连接层是一个输出为 1000 1000 1000的向量,也就是代表着 1000 1000 1000个类别,在实际中,需要根据当前识别认为的类别数进行修改。
  2. 学习率
    一般来说,预训练好的参数无需修改,可以将其设为无需学习的参量,也可以将其的学习率设置的非常小。而对于最后的全连接层,也就是对提取出来的图片信息进行分类的网络,其学习率就要比较大了。

作用与意义

微调技术可谓是没有足够算力人的福音了,其大大减少了训练的成本。

  1. 提取图像特征的CNN网络往往更加靠近输入,通过梯度反向传播进行训练,往往需要比靠近输出的全连接网络更耗费时间。
  2. 利用微雕技术,可以在极短的时间内得到一个非常好的结果,在5轮迭代之后就已经可以达到91%的正确率了;15轮迭代就能达到97%的正确率。
    在这里插入图片描述

不足与局限性

并不是所有情况都能使用微调技术的,在图片特征出现显著差异的时候,使用微调技术往往不能得到满意的结果。
比如,在ImageNet上训练的模型都是基于正常图片的,但是如果将它用于识别医学影像(X光片等)就会导致失败。同样用这个模型去识别卡通图片也往往会识别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【pytorch】微调技术 的相关文章

随机推荐

  • PBFT简单介绍

    PBFT是一种常用于联盟链的共识算法 中文名是实用拜占庭容错算法 首先用户发送交易到区块链网络中 主节点接收到交易并向其他节点进行广播 其他节点收到广播后记录下交易并广播给其他节点 当各节点收到相同交易的广播次数 包括节点自己本身一次 达到
  • windows10+python3.6+anaconda+pytorch-cpu的初步环境搭建

    windows10 python3 6 anaconda pytorch cpu的初步环境搭建 安装pytorch cpu 新建环境 1 利用anaconda进行创建新的环境 cmd conda create n pytorch pytho
  • 2018年LeetCode高频算法面试题刷题笔记——分割回文串(字符串)

    1 解答之前的碎碎念 这个题我的想法是 第一刀依次切在第1 s length 2个元素后面 得到两个字符串s0和s1 首先判断s0整体是否为回文 不是则第一刀的位置 1 然后再检测s1整体是否为回文 并在s1的第1 s1 length 2个
  • C++关于(*i)->n为何要加括号

    include
  • Linux基础命令--文件和目录管理命令

    目录 常用文件和目录管理命令 1 ls命令 ls命令还支持一些选项和参数 例如 2 ll命令 基本用法如下 3 cd命令 除了基础用法外 cd命令还有一些常用的选项 如 4 pwd命令 基础用法如下 5 mkdir命令 基础用法如下 6 r
  • Dilated Convolution介绍

    Dilated Convolution介绍 相关的两篇论文分别是 ICLR2016 MULTI SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS 和 CVPR2017 Dilated Res
  • vcruntime140.dll重新安装方法,vcruntime140.dll修复教程

    vcruntime140 dll是Microsoft Visual C Redistributable的一部分 它是Windows操作系统上非常重要的一个动态链接库文件 这个文件包含了一些运行时库函数 用于支持运行在Windows上使用了M
  • C# RestSharp,Body提交

    关于RestSharp Body提交 需要引用RestSharp 遇到一个问题 使用Httprequest提交Post请求时 各种值传不过去 使用Postman用同样的 添加请求头 传输json格式亦然 经过大佬指点 用Postman里面的
  • MATLAB删除任意字符

    删除空格 s isspace s 去除空格 删除字符串中所有的16进制的0 char2asc2 abs s 转asc2 char2asc2 char2asc2 0 删除NULL 0 s char char2asc2 删除字符串中所有的16进
  • 在Windows下使用Curl工具完美操作ElasticSearch

    首先可以从 http curl haxx se download html上下载并安装Windows环境下的Curl 安装完成后 将Curl的I386目录的完整路径添加到Windows的Path环境变量中 C Users Carl gt c
  • 专利与论文-1:为什么要写专利?专利有什么好处?

    前言 很多人 都认为写专利没什么多大的用处 不过是个人赚一点公司申请专利的奖励而已 对个人和公司 用处都不是大 还不如做学习一些专业技能或做一些实际项目 花在专利上的实际不太值得 随着时间和知识双重积累 越来越会发现专利 无论对于个人还公司
  • 强化学习代码实战入门

    这是一个易理解的 demo 300行左右 可以作为RL的入门代码 辅助基础公式的理解 这个是我自己的学习笔记 三连留下邮箱 可以直接发送完整的代码标注文件 如有错误 麻烦指出 我已经蛮久没写博了 上一篇RL博客也快一年半了 很久没做这一块了
  • Java生成二维码并解决中文乱码问题

    Java生成二维码并解决中文乱码问题 引入依赖 JAVA代码 引入依赖 maven工程
  • ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)

    LVGL是一个C语言编写的免费的开源图形库 其提供了用于嵌入式GUI的各种元素 用户可以利用丰富的图形库资源 在消耗极低内存的情况下构建视觉效果丰富多彩的GUI 只需 64kB 闪存和 8kB RAM 就足以满足简单的用户界面 LVGL 可
  • 【ObjectARX】--创建和访问图形数据库(DwgDatabase)

    1 使用ObjectARX创建新工程DwgDatabase 选择MFC支持 2 注册一个命令CreateDwg创建一个新的图形文件 并保存在AutoCAD的安装路径中 实现函数为 static void AAAMyGroupCreateDw
  • Java链式编程与Builder(建造者)设计模式

    一 链式编程 1 1 释义 链式编程 也叫级联式编程 调用对象的函数时返回一个this对象指向对象本身 达到链式效果 可以级联调用 1 2 特点 可以通过一个方法调用多个方法 将多个方法调用链接起来 形成一条 链式 从而提高代码的可读性 1
  • ASP.NET Web Pages基础知识---Razor 实例:显示图片

    假设在您的图像文件夹中有 3 张图像 您想根据用户的选择动态地显示图像 这可以通过一段简单的 Razor 代码来实现 如果在您的网站的图像文件夹中有一个名为 Photo1 jpg 的图像 您可以使用 HTML 的 img 元素来显示图像 如
  • 用于机器学习的 NumPy(ML)

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 031.PyQt5_QCommandLinkButton_命令链接按钮

    QCommandLinkButton命令链接按钮 描述 命令链接是Windows Vista引入的新控件 它的用途类似于单选按钮的用途 因为它用于在一组互斥选项之间进行选择 命令链接按钮不应单独使用 而应作为向导和对话框中单选按钮的替代选项
  • 【pytorch】微调技术

    前言 训练神经网络是一件非常耗费时间的事情 其需要大量的算力以及大量的数据 显然从头开始训练并不是明智之选 利用好已有的资源才是明智之选 微调技术 图像识别笼统地可以分为两步 提取图片的特征 此部分往往通过CNN卷积神经网络实现 根据提取的