python打卡day44@浙大疏锦行

知识点回顾:

  1. 预训练的概念
  2. 常见的分类预训练模型
  3. 图像预训练模型的发展史
  4. 预训练的策略
  5. 预训练代码实战:resnet18

作业:

  1. 尝试在cifar10对比如下其他的预训练模型,观察差异,尽可能和他人选择的不同
  2. 尝试通过ctrl进入resnet的内部,观察残差究竟是什么 

一、在 CIFAR10 上对比如下其他的预训练模型

可以选择不同的预训练模型,如 VGG16、Inception V3 等,对比它们在 CIFAR10 数据集上的训练时间、准确率等指标。以下是使用 VGG16 的示例代码:

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torchvision.models import vgg16# 数据预处理
transform = transforms.Compose([transforms.Resize((224, 224)),  # Inception 和 VGG 要求输入图像大小为 224x224transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])# 加载 CIFAR10 数据集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=True, num_workers=2)testset = torchvision.datasets.CIFAR10(root='./data', train=False,download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,shuffle=False, num_workers=2)# 加载预训练的 VGG16 模型
model = vgg16(pretrained=True)
num_ftrs = model.classifier[6].in_features
model.classifier[6] = nn.Linear(num_ftrs, 10)  # 修改最后一层全连接层以适应 CIFAR10 的 10 个类别# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)# 训练模型
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)for epoch in range(2):  # 训练 2 个 epochrunning_loss = 0.0for i, data in enumerate(trainloader, 0):inputs, labels = data[0].to(device), data[1].to(device)optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()if i % 2000 == 1999:    # 每 2000 个 mini-batches 打印一次print(f'[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 2000:.3f}')running_loss = 0.0print('Finished Training')

 二、尝试通过 ctrl 进入 ResNet 的内部,观察残差究竟是什么

在 PyTorch 中,如果你使用的是 PyCharm 等 IDE,可以按住 Ctrl 键并点击 resnet18 函数,进入 torchvision.models.resnet 模块。在该模块中,可以找到 BasicBlock 类,它实现了 ResNet 的残差块。

class BasicBlock(nn.Module):expansion = 1def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,base_width=64, dilation=1, norm_layer=None):super(BasicBlock, self).__init__()if norm_layer is None:norm_layer = nn.BatchNorm2dif groups != 1 or base_width != 64:raise ValueError('BasicBlock only supports groups=1 and base_width=64')if dilation > 1:raise NotImplementedError("Dilation > 1 not supported in BasicBlock")# Both self.conv1 and self.downsample layers downsample the input when stride != 1self.conv1 = conv3x3(inplanes, planes, stride)self.bn1 = norm_layer(planes)self.relu = nn.ReLU(inplace=True)self.conv2 = conv3x3(planes, planes)self.bn2 = norm_layer(planes)self.downsample = downsampleself.stride = stridedef forward(self, x):identity = xout = self.conv1(x)out = self.bn1(out)out = self.relu(out)out = self.conv2(out)out = self.bn2(out)if self.downsample is not None:identity = self.downsample(x)out += identity  # 这一行实现了残差连接out = self.relu(out)return out

在 forward 方法中, out += identity 这一行实现了残差连接。 identity 是输入的原始特征图, out 是经过两层卷积和批量归一化处理后的特征图,将它们相加后再通过 ReLU 激活函数,使得模型可以学习到输入和输出之间的残差信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十一(3) 类,加深对拷贝构造函数的理解

class ClassName { public: // 拷贝构造函数:参数是同类型对象的引用(通常为 const 引用) ClassName(const ClassName& other) { // 复制 other 的成员变量到当前对象 } }; 参数要求:必须是同类型对象的引用&#xff0…

网页后端开发(基础1--maven)

maven的作用: Maven是一款管理和构建Java项目的工具。 1.依赖管理: 方便快捷的管理项目依赖的资源(jar包) 不用手动下载jar包,只需要中maven中引用,maven会查找本地仓库。若本地仓库没有,会直…

认识电子元器件---高低边驱动

目录 一、基本概念 二、关键参数对比 三、工作原理 (1)高边驱动 (2)低边驱动 四、典型的应用场景 五、如何选择 一、基本概念 可以理解成:高低边驱动是MOS/IGBT的一种应用方式 高低边驱动是电路拓扑概念&#…

JavaScript 标签加载

目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …

C/CPP 结构体、联合体、位段内存计算 指南

C/CPP 结构体、联合体、位段内存计算 指南 在C语言中,结构体、联合体和位段是对数据的高级抽象,它们可以让程序员以更易于理解的方式来操作复杂的数据结构。然而,这些结构在内存中的布局可能并不如它们的语法结构那样直观,特别是当…

ASR(语音识别)语音/字幕标注 通过via(via_subtitle_annotator)

文章目录 1 VIA 官网资料2 语音/字幕标注3 键盘快捷键常规当一个时间片段被选中时图像或视频帧中的空间区域 1 VIA 官网资料 VIA官网:https://www.robots.ox.ac.uk/~vgg/software/via/ VIA官网标注示例:https://www.robots.ox.ac.uk/~vgg/software/via/…

mq安装新版-3.13.7的安装

一、下载包,上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量,直接就安装了。 erl…

高通平台PCIE EP模式log丢失问题

高通平台PCIE EP模式log丢失问题 1 问题背景2 问题分析2.1 对比USB2.1.1 Logtool优化2.1.2 Device mhi与fs对比2.2 优化方案2.2.1 Diag系统优化2.2.2 Host mhi优化3 最终成果1 问题背景 高通5G模组如SDX55\SDX62\SDX65\SDX72\SDX75等支持pcie ep模式。会通过pcie与host(如MT7…

Python应用输入输出函数

大家好!在 Python 编程中,输入输出函数是与用户进行交互的桥梁。通过输入函数,我们可以获取用户的输入数据;通过输出函数,我们可以向用户展示程序的运行结果。对于初学者来说,掌握基本的输入输出操作是编程入门的重要一…

如何使用 Ansible 在 Ubuntu 24.04 上安装和设置 LNMP

在当今世界,自动化是有效管理和部署 Web 应用程序的关键。Ansible 是一个强大的自动化工具,它是一款开源软件配置、配置管理和应用程序部署工具。本文将指导您使用 Ansible 在 Ubuntu 服务器上安装 LNMP 堆栈(Linux、Nginx、MySQL、PHP)。 先决条件 为了执行本指南中讨论的…

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…

RK3288项目(四)--linux内核之V4L2框架及ov9281驱动分析(中)

目录 一、引言 二、V4L2其他部件驱动分析 ------>2.1、mipi-dphy ------------>2.1.1、dts ------------>2.1.2、driver ------------>2.1.3、notifier机制 ------------>2.1.4、异步回调 ------------>2.1.5、V4L2 subdev ------>2.2、mipi-csi…

容器-使用slim减少10x+大模型镜像

slim(原docker-slim)是一个开源工具,全称SlimToolkit(https://github.com/slimtoolkit/slim),用于基于已有的Docker镜像减小镜像的大小,同时尽可能保留容器的功能。它通过分析镜像的运行环境和应…

Golang基础学习

​​​​​​​​​​ 初见golang语法 go项目路径 cd $GOPATH //ls可以看到有bin,pkg,src三个文件 cd src/ mkdir GolangStudy cd GolangStudy mkdir firstGolanggo程序执行: go run hello.go//如果想分两步执行: go build hello.go ./hello导入包的…

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…

电路图识图基础知识-远程/本地启停电动机(二十一)

在实际的生产中,经常会需要电动机的控制可以就地控制和远方控制,在集中的控制室中,远 方控制电动机的启动、停止。在就地设置启动、停止按钮或是紧急停车按钮,以满足生产的需要。 1.远程、多点及连锁控制电动机电路 2.元器件配置…

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时,未明确定义编译时特性标志。以下是详细解释和解决方案: ‌问题原因‌: 该标志是Vue 3.4引入的编译时特性标志,用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…

Vue.js教学第二十一章:vue实战项目二,个人博客搭建

基于 Vue 的个人博客网站搭建 摘要: 随着前端技术的不断发展,Vue 作为一种轻量级、高效的前端框架,为个人博客网站的搭建提供了极大的便利。本文详细介绍了基于 Vue 搭建个人博客网站的全过程,包括项目背景、技术选型、项目架构设计、功能模块实现、性能优化与测试等方面。…