ResNet-18网络模型+原理解析+Pytorch实现+手写模型

深度学习基于Resnet18的图像多分类--训练自己的数据集(超详细 含源码) 阅读详情

ResNet-18 通过引入残差连接(Skip Connection),有效解决了深层卷积神经网络(CNN)中常见的梯度消失与网络退化问题。

论文 https://arxiv.org/pdf/1512.03385v1

对于传统的深度学习网络,我们普遍认为网络深度越深(参数越多)非线性的表达能力越强,该网络所能学习到的东西就越多。 凭借这一基本规则,经典的CNN网络从LetNet-5(5层)和AlexNet(8层)发展到VGGNet(16-19),再到后来GoogleNet(22层)。 但是后来发现传统的CNN网络结构随着层数加深到一定程度之后,越深的网络反而效果更差,过深的网络竟然使分类的准确率下降了,如图所示 56层网络的错误率 高于 20层的错误率 在这里插入图片描述

网络退化

网络退化(Network Degradation)是指随着神经网络深度的增加,模型的性能并未如预期那样持续提升,反而可能出现饱和乃至下降的现象。这种现象并非由过拟合引起,因为在更深的网络中,即使在训练数据上的表现也开始变差,导致训练误差和测试误差之间的差距可能增大。


残差结构

传统深层网络直接学习映射 (H(x)),层数加深时梯度消失、性能下降。 ResNet 改为学习残差: H(x)=F(x)+x 在这里插入图片描述

  • x:输入特征(跳跃连接,直接传到输出)

  • F(x):残差函数(2层3×3卷积+BN+ReLU)

  • 优势:

    • 梯度可沿跳跃连接直达浅层,缓解梯度消失

    • 网络易拟合恒等映射(F(x)\to0)),深层训练更稳

关键特性

  1. 轻量高效:约11M参数、1.8G FLOPs,推理快,适合移动端/嵌入式。

  2. 模块化设计:4个Stage,每阶段2个Block,易扩展(如ResNet-34/50)。

  3. 强表征能力:通道从64→512,空间逐级下采样,兼顾细粒度与全局特征。

  4. 训练稳定:残差连接让深层梯度有效回传,收敛快、泛化性好。

典型应用

  • 图像分类:ImageNet、CIFAR-10/100、自定义数据集

  • 迁移学习:特征提取、微调小样本任务

  • 检测/分割骨干:Faster R-CNN、YOLO、Mask R-CNN、U-Net

  • 轻量化部署:手机、边缘设备、实时系统

ResNet-18 结构总览

(输入 3×224×224) 共18个可训练层(17卷积+1全连接),分5阶段: 在这里插入图片描述

阶段操作输出尺寸通道数层数
输入RGB图像224×2243-
Stage17×7卷积(64, stride=2)+BN+ReLU+MaxPool(3×3, stride=2)56×56641
Stage22×BasicBlock(3×3卷积×2)56×56644
Stage32×BasicBlock(第一个stride=2下采样)28×281284
Stage42×BasicBlock(第一个stride=2下采样)14×142564
Stage52×BasicBlock(第一个stride=2下采样)7×75124
分类头全局平均池化+全连接(1000)1×1512→10001

BasicBlock(基础残差块)

  • 左图:Conv(3×3)→BN→ReLU→Conv(3×3)→BN

  • 右图跳跃连接:维度匹配时用恒等映射;不匹配时用1×1卷积调整通道/步长 在这里插入图片描述

代码示例

在这里插入图片描述

ResNet18
@Author:  优快云@王_teacher  bilibili@王_teacher
@Date: 2024/5/26
@Description: RestNet18 纯手写
"""
import torch
import torch.nn as nn
from torchvision.models import resnet18
​
# 纯平铺版 ResNet18,没有任何子模块、没有任何函数调用
class ResNet18(nn.Module):
    def __init__(self, num_classes=1000):
        super().__init__()
​
        # ==================== Stem 层 ====================
        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
​
        # ==================== Layer 1 (64, 无下采样) ====================
        # Block 1
        self.layer1_conv1 = nn.Conv2d(64, 64, 3, 1, 1, bias=False)
        self.layer1_bn1 = nn.BatchNorm2d(64)
        self.layer1_conv2 = nn.Conv2d(64, 64, 3, 1, 1, bias=False)
        self.layer1_bn2 = nn.BatchNorm2d(64)
​
        # Block 2
        self.layer1_conv3 = nn.Conv2d(64, 64, 3, 1, 1, bias=False)
        self.layer1_bn3 = nn.BatchNorm2d(64)
        self.layer1_conv4 = nn.Conv2d(64, 64, 3, 1, 1, bias=False)
        self.layer1_bn4 = nn.BatchNorm2d(64)
​
        # ==================== Layer 2 (128, 下采样) ====================
        # Downsample
        self.downsample2 = nn.Sequential(
            nn.Conv2d(64, 128, 1, 2, bias=False),
            nn.BatchNorm2d(128)
        )
        # Block 1
        self.layer2_conv1 = nn.Conv2d(64, 128, 3, 2, 1, bias=False)
        self.layer2_bn1 = nn.BatchNorm2d(128)
        self.layer2_conv2 = nn.Conv2d(128, 128, 3, 1, 1, bias=False)
        self.layer2_bn2 = nn.BatchNorm2d(128)
​
        # Block 2
        self.layer2_conv3 = nn.Conv2d(128, 128, 3, 1, 1, bias=False)
        self.layer2_bn3 = nn.BatchNorm2d(128)
        self.layer2_conv4 = nn.Conv2d(128, 128, 3, 1, 1, bias=False)
        self.layer2_bn4 = nn.BatchNorm2d(128)
​
        # ==================== Layer3 (256, 下采样) ====================
        self.downsample3 = nn.Sequential(
            nn.Conv2d(128, 256, 1, 2, bias=False),
            nn.BatchNorm2d(256)
        )
        self.layer3_conv1 = nn.Conv2d(128, 256, 3, 2, 1, bias=False)
        self.layer3_bn1 = nn.BatchNorm2d(256)
        self.layer3_conv2 = nn.Conv2d(256, 256, 3, 1, 1, bias=False)
        self.layer3_bn2 = nn.BatchNorm2d(256)
​
        self.layer3_conv3 = nn.Conv2d(256, 256, 3, 1, 1, bias=False)
        self.layer3_bn3 = nn.BatchNorm2d(256)
        self.layer3_conv4 = nn.Conv2d(256, 256, 3, 1, 1, bias=False)
        self.layer3_bn4 = nn.BatchNorm2d(256)
​
        # ==================== Layer4 (512, 下采样) ====================
        self.downsample4 = nn.Sequential(
            nn.Conv2d(256, 512, 1, 2, bias=False),
            nn.BatchNorm2d(512)
        )
        self.layer4_conv1 = nn.Conv2d(256, 512, 3, 2, 1, bias=False)
        self.layer4_bn1 = nn.BatchNorm2d(512)
        self.layer4_conv2 = nn.Conv2d(512, 512, 3, 1, 1, bias=False)
        self.layer4_bn2 = nn.BatchNorm2d(512)
​
        self.layer4_conv3 = nn.Conv2d(512, 512, 3, 1, 1, bias=False)
        self.layer4_bn3 = nn.BatchNorm2d(512)
        self.layer4_conv4 = nn.Conv2d(512, 512, 3, 1, 1, bias=False)
        self.layer4_bn4 = nn.BatchNorm2d(512)
​
        # ==================== 头部 ====================
        self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
        self.fc = nn.Linear(512, num_classes)
​
    def forward(self, x):
        # Stem
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.maxpool(x)
​
        # ==================== Layer 1 ====================
        identity = x
        x = self.layer1_conv1(x)
        x = self.layer1_bn1(x)
        x = self.relu(x)
        x = self.layer1_conv2(x)
        x = self.layer1_bn2(x)
        x += identity
        x = self.relu(x)
​
        identity = x
        x = self.layer1_conv3(x)
        x = self.layer1_bn3(x)
        x = self.relu(x)
        x = self.layer1_conv4(x)
        x = self.layer1_bn4(x)
        x += identity
        x = self.relu(x)
​
        # ==================== Layer 2 ====================
        identity = self.downsample2(x)
        x = self.layer2_conv1(x)
        x = self.layer2_bn1(x)
        x = self.relu(x)
        x = self.layer2_conv2(x)
        x = self.layer2_bn2(x)
        x += identity
        x = self.relu(x)
​
        identity = x
        x = self.layer2_conv3(x)
        x = self.layer2_bn3(x)
        x = self.relu(x)
        x = self.layer2_conv4(x)
        x = self.layer2_bn4(x)
        x += identity
        x = self.relu(x)
​
        # ==================== Layer3 ====================
        identity = self.downsample3(x)
        x = self.layer3_conv1(x)
        x = self.layer3_bn1(x)
        x = self.relu(x)
        x = self.layer3_conv2(x)
        x = self.layer3_bn2(x)
        x += identity
        x = self.relu(x)
​
        identity = x
        x = self.layer3_conv3(x)
        x = self.layer3_bn3(x)
        x = self.relu(x)
        x = self.layer3_conv4(x)
        x = self.layer3_bn4(x)
        x += identity
        x = self.relu(x)
​
        # ==================== Layer4 ====================
        identity = self.downsample4(x)
        x = self.layer4_conv1(x)
        x = self.layer4_bn1(x)
        x = self.relu(x)
        x = self.layer4_conv2(x)
        x = self.layer4_bn2(x)
        x += identity
        x = self.relu(x)
​
        identity = x
        x = self.layer4_conv3(x)
        x = self.layer4_bn3(x)
        x = self.relu(x)
        x = self.layer4_conv4(x)
        x = self.layer4_bn4(x)
        x += identity
        x = self.relu(x)
​
        # 分类头
        x = self.avgpool(x)
        x = torch.flatten(x, 1)
        x = self.fc(x)
        return x
​
if __name__ == '__main__':
    torch.manual_seed(0)
​
    # 模型
    model = ResNet18()
​
​
    x = torch.randn(1,3,224,224)
    model.eval()
    py = model.forward(x)
    print(py.shape)

基于ResNet18网络完成图像分类任务 CIFAR-10数据集包含了10种不同的类别、共60,000张图像,其中每个类别的图像都是6000张,图像大小均为像素。CIFAR-10数据集的示例如图所示。什么是预训练呢?举例子进行简单的介绍。 阅读详情

相关推荐

使用resnet18实现花生图片分类与目标检测

)

m0_63821003的博客 2918

Resnet 18网络模型

1. 残差网络:(Resnet) 残差块: 让我们聚焦于神经网络局部:如图左侧所示,假设我们的原始输入为x,而希望学出的理想映射为f(x)(作为上方激活函数的输入)。左图虚线框中的部分需要直接拟合出该映射f(x),而右图虚线框中的部分则需要拟合出残差映射f(x)−x。 残差映射在现实中往往更容易优化。 以本节开头提到的恒等映射作为我们希望学出的理想映射f(x),我们只需将右图虚线框内上方的加权运算(如仿射)的权重和偏置参数设成0,那么f(x)即为恒等映射。 实际中,当理想映射f(x)极接近于恒等映..

Chenzhinan1219的博客 6万+

【学习笔记】resnet-18 pytorch源代码解读

对于pytorch中预定义的ResNet-18的代码进行简单的分析

lcn463365355的博客 3万+

PyTorch实现ResNet18

ResNet-18结构 基本结点 代码实现 import torch import torch.nn as nn from torch.nn import functional as F class RestNetBasicBlock(nn.Module): def __init__(self, in_channels, out_channels, stride): super(RestNetBasicBlock, self).__init__() self.

weixin_36979214的博客 2万+

ResNet18、50模型结构

resnet18和resnet50模型结构

pywin 1万+

ResNet50网络架构详解:从残差学习到PyTorch实现与训练技巧

在深度神经网络中,梯度消失和网络退化是训练深层模型时常见的挑战,它们会阻碍模型性能随深度增加而提升。残差学习通过引入跳跃连接,让网络层学习输入与目标输出之间的残差,而非直接映射,这有效缓解了梯度问题,使信息能跨层直接传播。其技术价值在于让训练数百甚至上千层的超深网络成为可能,极大提升了模型的特征表达能力。这一原理在计算机视觉领域应用广泛,尤其在图像分类、目标检测等任务中。ResNet50作为该家族的经典代表,采用瓶颈结构设计,通过1x1卷积进行先降维再升维,在计算效率和模型性能间取得平衡。本文结合PyTor

weixin_34378969的博客 669

残差神经网络ResNet学习,以ResNet18为例代码剖析

1.首先导入需要使用的包 import torch import torch.nn as nn import torch.nn.functional as F 我用的是pytorch,所以导入这三个。 2.定义的残差模块结构 残差块有两种设计方式,左边的是用于18,34层的,这样参数多,右面这种设计方式参数少,适用于更深度的 class ResidualBlock(nn.Modu...

luoqibo的博客 9595

ResNet网络

ResNet(深度残差网络)通过引入残差块结构解决了深度神经网络中的梯度消失和模型退化问题。其核心创新是跨层连接(shortcut),允许输入直接跳过部分层与输出相加。残差块包含批量归一化(BN)和ReLU激活函数,BN层通过归一化每批数据加速训练并稳定网络。ResNet-18等模型展示了残差块的具体实现方式,包括处理通道数变化的情况。这种结构使网络能扩展到上百层,显著提升了图像分类等任务的性能,成为深度学习中的重要架构。

weixin_49898946的博客 590

Pytorch中Resnet的代码实现解析

本文介绍Pytorch对resnet的代码实现。文章从基本框架出发,由浅入深地再介绍部分细节设计,因此建议顺序阅读。 前言 Resnet是最著名的CNN网络之一,残差模型也在后续网络设计中有广泛的应用。本文主要解读Pytorch的torchvision == 0.11.1模块中对Resnet的代码实现。本文假设读者已经对CNN以及Resnet的结构有一定了解。 首先给大家推荐相关的优秀资源,《pytorch中残差网络resnet的源码解读》和李沐Resnet论文精读。 Resnet使用 直接使用Pytorc

weixin_50640987的博客 3636

图像情绪分析实战:从FER2013到ResNet18的完整工程指南

人脸识别与情绪识别是计算机视觉领域的基础任务,广泛应用于人机交互、安防监控与教育评估等场景。其核心技术链路通常分为人脸检测与表情分类两阶段,前者定位人脸区域,后者对裁剪后的图像进行类别预测。本文从深度学习图像分类的基本原理出发,介绍如何使用PyTorch构建一个可复现的情绪分析系统,包括FER2013数据集的解析与预处理、ResNet18模型选型与训练参数配置、数据增强策略以及混淆矩阵分析。针对类别不平衡、过拟合与泛化能力不足等工程常见问题,给出了具体的排查与解决方案。最后通过真实照片验证与误差分析,帮助读

weixin_29045585的博客 179

100kHz手持LCR表设计:高频阻抗测量与校准实战解析

阻抗测量是电子元件测试的基础,LCR表通过施加正弦激励并分析电压电流的幅值与相位,即可获取电容、电感、电阻的等效参数。在开关电源、无线充电等高频应用场景中,元件在100kHz下的ESR和阻抗特性尤为关键,传统10kHz手持仪表难以满足需求。本文从自动平衡桥原理出发,探讨如何将台式电桥的核心能力浓缩至手持设备,重点剖析高频寄生参数抑制、模拟链路设计、数字相敏检波算法及开路短路校准方法。通过实测数据验证,在100kHz频率下基本精度可达0.5%以内,为维修现场、产线抽检及硬件调试提供了可携带的精密测量方案。全文

weixin_33910191的博客 398

ResNet18模型可视化教程:云端GPU免安装,直观理解网络

想可视化自己的修改版本?1. 准备修改后的PyTorch模型文件(.pt或.pth)2. 通过界面"Upload Model"上传3. 系统会自动解析新结构零成本入门:云端方案省去本地安装烦恼,学生党友好交互式学习:通过点击、拖拽等操作直观理解网络结构残差连接可视化:清晰看到"捷径路径"如何解决梯度消失特征演变观察:从像素到语义的完整转化过程可视化即学即用:所有操作都可立即复现,建议边看边动手💡获取更多AI镜像想探索更多AI镜像和应用场景?访问优快云星图镜像广场。

MorganiteEagle55的博客 951

rk3566-11.0新增device分区

1.增加块设备 2.修改根目录节点权限 3.开机启动自动挂载 增加块设备 1.修改parameter.txt文件,新增块设备大小及命名 device/rockchip/rk356x/rk3566_r/parameter.txt FIRMWARE_VER: 11.0 MACHINE_MODEL: rk3566_r MACHINE_ID: 007 MANUFACTURER: rockchip MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE

weixin_51115260的博客 3384

torchvision中的resnet的实现

一、ResNet网络模型详解 1.1 整体结构 可以看到,resnet34主要就是由layer1-4组成。而这4个layer分别就是由3、4、6、3个BasicBlock堆叠而成。 BasicBlock有两种: 右边虚线的BasicBlock主要用在layer2-4的第一块。作用就是要保证主分支和shortcut的输出特征shape相同。 1.2详细介绍 前面: 输入图片尺寸:224*224*3 conv1: 输入通道是3,输出通道是...

liupc的学习笔记 3892

ESP32S3开发实战:从Vscode+IDF环境配置到OpenOCD单步调试全流程

本文详细介绍了ESP32S3开发环境的完整搭建流程,重点讲解如何在Vscode中配置ESP-IDF开发框架,并利用OpenOCD工具实现硬件单步调试。内容涵盖从环境准备、工程创建、代码烧录到高级调试技巧的全方位实战指南,旨在帮助开发者快速掌握ESP32S3的高效开发与调试方法。

weixin_29168813的博客 211

Ansys疲劳仿真:工程结构寿命评估的实战方法论

做了这么多年仿真,有个感受越来越深——静力学算得再漂亮,疲劳寿命预测不对,项目照样过不了评审。不是因为理论有多复杂,而是因为疲劳损伤的物理机制本身就带有统计属性,材料内部的微观缺陷分布、应力集中位置、载荷谱的随机性,每一项都能让结果偏移20%甚至更多。本文从实战出发,梳理Ansys疲劳仿真的核心流程,重点讲清楚载荷类型选择、S-N曲线处理、应力集中修正这几个最容易出问题的环节。疲劳仿真做好了,最大的收获不是跑出一个漂亮的Damage云图,而是对结构的真实薄弱环节建立起量化的认知。

keyanxiaobaigou的博客 529

揭秘HandPose X核心技术:支持ResNet/ShuffleNet等6大模型的实现原理

HandPose X是一款基于PyTorch的手部21个关键点检测开源项目,专注于二维手势姿态估计与手势识别任务。该项目创新性地集成了ResNet、ShuffleNet、MobileNetV2等6种主流深度学习模型,为开发者提供了灵活高效的手部姿态检测解决方案。本文将深入剖析这些模型的实现原理及其在手部关键点检测中的应用。 ## 核心模型架构总览 🚀 HandPose X的模型架构设计遵循模

gitblog_00304的博客 753

别再只调电压了!深入理解数控电源的CC/CV模式与双闭环PID控制(以BUCK电路为例)

本文深入解析数控电源的CC/CV模式与双闭环PID控制技术,以BUCK电路为例,探讨如何通过双闭环控制优化负载突变响应和模式切换稳定性。文章详细介绍了电压环与电流环的协同工作原理、PID参数整定技巧及工程实践中的非线性补偿方法,帮助工程师提升电源设计的智能控制能力。

weixin_27017211的博客 266

从零开始理解resnet18.tv_in1k:深度残差网络的原理与架构剖析

resnet18.tv_in1k是一款基于PyTorch实现的深度残差网络模型,专为图像分类任务设计。作为ResNet家族的轻量级成员,它以仅11.7M的参数量和1.8 GMACs的计算量,在ImageNet-1k数据集上实现了高效的图像识别能力,是计算机视觉入门者学习深度学习架构的理想选择。 ## 为什么选择ResNet18?解密残差网络的核心突破 传统深度神经网络在堆叠超过一定层数后会出现

gitblog_00973的博客 407

在 SAP BTP ABAP 环境中构建多租户应用:从架构到实战

ABAP多租户应用架构解析 本文详细介绍了SAP BTP中ABAP环境的多租户应用架构,重点阐述了其核心组件及协作机制。在云原生SaaS模式下,多租户架构使多个客户能共享同一套ABAP平台,同时保持数据和配置隔离。架构包含三层:平台与子账户层、多租户应用与平台服务层(含Approuter、ABAP Solution service、XSUAA等核心组件)、ABAP系统与租户层。文章深入分析了各组件功能,包括Approuter的路由机制、ABAP Solution service的自动资源调度、XSUAA的安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 217

【GameFramework框架】三、快速启动

这篇文章就带领大家如何快速启动GameFramework框架。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 4435

ResNet18原理与工程实践:从残差学习到工业部署

残差网络(ResNet)是一种通过跳跃连接解决深层CNN梯度消失问题的核心架构,其本质是将网络优化目标从拟合完整映射转为学习微小残差。ResNet18作为该范式的轻量级代表,以18层卷积结构、约11.7M参数和1.8 GFLOPs计算量,在精度、速度与部署友好性之间实现关键平衡。它广泛应用于图像分类、目标检测、医学影像分析及边缘AI等场景,是教学、科研与工业落地中最常选用的骨干网络模型之一。本文深入解析ResNet18的残差块设计、四阶段结构逻辑、PyTorch手写实现要点,以及微调、量化与ONNX部署等全

weixin_29098391的博客 288

CAPL学习之路-关键字

在capl中,关键字具有特殊的含义和用途,因此,不得将关键字用作变量或函数的名称 声明数据类型的关键字 可以用不同的关键字,声明或引用不同类型的数据 byte 声明一个字节的变量 word 声明两个字节的变量 dword 声明四个字节的变量 int 声明两个字节的整数 long 声明四个字节的变量 qword 声明八个字节的变量 char 声明一个字符串 float 声明一个浮点数,8个字节 double 声明一个浮点数,8个字节 定义一个结构体或枚举类型 struct struct Data { .

jasonj333 6110

ONNX Model Zoo 中的 ResNet 图像分类模型:从架构原理到推理、量化与源码实践

ResNet 是深度学习中影响最为深远的卷积网络架构之一,它以"残差学习"框架解决了深层网络难以训练的问题,并在 ImageNet 上以最多 152 层的深度(约为 VGG 的 8 倍深、而计算复杂度更低)取得了当时顶尖的分类精度。本文以 ONNX Model Zoo 仓库中 [validated/vision/classification/resnet/README.md](https://li

gitblog_00765的博客 263

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

torchvision.models全解析:从AlexNet到ResNet,这些模型你都会用了吗?

本文深度解析了torchvision.models模块,从AlexNet、VGG到ResNet、DenseNet及EfficientNet等经典模型的设计哲学与适用场景。详细介绍了预训练模型的正确加载、数据预处理、模型微调与改造策略,并提供了训练、评估及工业级部署的实战指南,帮助开发者高效利用这些模型解决实际计算机视觉问题。

gin88的博客 434

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

(三)使用自己搭建的分类网络来训练

使用自己搭建的网络结构来进行训练

m0_48095841的博客 770

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: PyTorch :pad_sequence、pack_padded_sequence、pad_packed_sequence 序列填充与打包详解
下一篇: ResNet18 微调步骤(冻结骨干微调 / 全参数微调)
王_teacher
博客等级 码龄9年 118粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值