快速上手Pytorch Lighting框架 | 深度学习入门
快速上手Pytorch Lighting框架 | 深度学习入门
- 前言
- 参考官方文档
- 介绍
- 快速上手
- 基本流程
- 常用接口
- LightningModule
- \_\_init\_\_ & setup()
- \*\_step()
- configure_callbacks()
- configure_optimizers()
- load_from_checkpoint
- Trainer
- 常用参数
- 可选接口
- Loggers
- TensorBoard Logger
- Callbacks
- EarlyStopping
- ModelCheckpoint
- ProgressBar
前言
本文将介绍一个深度学习的训练框架——Pytorch Lighting框架。首先会介绍Pytorch Lighting框架的特点,然后会聚焦于你使用该框架时一定会使用的那些接口,包括我个人学习该框架时的经验传授。
参考官方文档
- Welcome to ⚡ PyTorch Lightning — PyTorch Lightning 2.5.1.post0 documentation
- Lightning in 15 minutes — PyTorch Lightning 2.5.1.post0 documentation
- How to Organize PyTorch Into Lightning — PyTorch Lightning 2.5.1.post0 documentation
介绍
Pytorch Lightning是一个基于Pytorch的深度学习与机器学习的框架,它进一步封装Pytorch的接口,简化了深度学习训练代码的搭建过程,帮助用户能够关注于模型本身,而不需要再反复书写重复的训练代码。
Pytorch Lighting框架本质是对Pytorch的进一步封装,所以如果熟悉Pytorch框架,那么很容易上手Pytorch Lighting。结合官方文档以及个人使用体验,相比Pytorch,我认为Pytorch Lightning具有以下特点:
- 代码复用性:Pytorch Lightning提供训练流程的所有接口,可以通过继承的方式,准备训练不同阶段的组件,从而在相似任务之间使用同一份代码。
- 代码可读性:原本的Pytorch代码被进一步封装到框架中,让代码的聚合程度更高,训练流程更清晰,提高了代码的可读性。
- 灵活性:通过框架类方法,可以根据需求定制特定环节的计算逻辑,精细控制训练的每个细节。
- 可移植性:Pytorch Lightning的框架添加了自动检测训练设备的功能,同一份代码可以不仅在本地的CPU上训练,也可以通过远程服务器使用多GPU训练。
- 自动化:框架集成了一些训练会用到的工具,比如日志输出、检查点记录等等。
更多详细内容,可以查阅官方文档介绍!
快速上手
基本流程
使用Lighting框架训练一个深度学习模型,遵循以下的流程:
- 安装Pytorch Lighting
- 定义Pytorch Lighting模块
- 定义数据集(生成样本迭代器)
- 配置训练器,训练模型
- 使用模型:包括测试模型或使用模型预测…
- 可视化训练过程
常用接口
上一小节,简单介绍了使用Pytorch Lighting框架的流程。其本质和普通的机器学习训练流程是一致的,如果只是简单的使用PL框架,几乎可以不输入多余的参数,就能直接开始训练,PL会帮助你完成大量的任务。同时框架提供了训练流程中每一步的对应接口,让用户可以根据需求,修改不同的细节。本小节中将具体介绍这些重要的接口,主要对应上述流程的第2步、第4步及第5步。
对于第3步,PL训练时需要迭代器类型的输入,可以手动生成样本迭代器,也可以使用Pytorch中的Dataloader等,此处将不再展开。
LightningModule
LightningModule
是框架的核心部件,该类中提供关于训练的所有核心方法,涵盖6个方面:
- 模型初始化:init & setup()
- 训练循环:training_step()
- 验证循环:validation_step()
- 测试循环:test_step()
- 预测循环:predict_step()
- 优化器及学习率调整
__init__ & setup()
与类的基本使用方法相同,在LightingModule类的构造函数中,需要对类做必要的初始化,比如导入核心模型结构、优化器方法、损失函数类型等等。
setup(_trainer_, _pl_module_, _stage_)
setup()本质是一个回调函数,功能也是对类进行初始化设置,一般用于不同的训练阶段(predict,test,…)。调用该接口可以在不同的阶段采用不同的初始化策略。
*_step()
在不同的阶段的循环步中,可以部署期望的任务结果。除了基本的前馈计算、反向传播等操作,可以添加日志输出、指标收集等等。比如在train阶段,只获取loss指标;在test阶段,同时获取loss指标、acc指标等。
configure_callbacks()
通过重写该方法,可以定制训练所需的回调函数。当模型被调用的时候,比如执行test()的时候,框架会自动调用这些回调函数。
如果与Trainer中的回调函数表有冲突时,框架会优先使用此处的回调函数配置。
configure_optimizers()
该方法下,可以配置训练过程中使用的优化器类型以及具体的学习率。在常规模型的训练中,只会配置一个优化器,那么返回值就是单个优化器。如果是GANs或其他需要多个优化器的模型,支持返回多个迭代器,但是需要手动进行模型优化,即需要配置optimizer_step()
方法。
load_from_checkpoint
load_from_checkpoint(_checkpoint_path_, _map_location=None_, _hparams_file=None_, _**kwargs_)
一般在测试阶段会需要调用该函数,用一个已经训练好的模型来初始化LightingModule类。checkpoint_path是训练好的模型的.ckpt文件存储位置,PL框架也支持传入URL,或一个类。
TIPS: 如果构造函数传入超参数,记得在构造函数中调用调用self.save_hyperparameters()
。这样框架才会自动保存这些超参数到.ckpt文件中。否则如果训练、测试阶段分开进行时,需要重新导入模型,则需要准备.yaml文件,或超参数列表,才能正确的初始化模型。
Trainer
如果完成了LightningModule
的配置,直接实例化一个训练器Trainer,便可以直接开始训练,默认生成的Train可以自动的帮助你完成所有训练任务:
model = MyLightningModule()trainer = Trainer()
trainer.fit(model, train_dataloader, val_dataloader)
模型完成训练后,单独调用test()、validate()方法,对模型进行测试、验证。如果有特殊的训练、测试、验证需求,可以在实例化Trainer的时候进行配置。
常用参数
- accelerator & devices::
该参数是PL框架的特点之一,只需要实例化不同的Trainer就可以实现在不同硬件设备下的训练。也可以不指定参数,框架会自动匹配对应设备完成训练。
accelerator = ["cpu"] ["gpu"] ["tpu"] ["hpu"] ["auto"]
devices = [number of devices] ["auto"]
- callbacks:: 传入单个回调类或回调列表。当传入的是列表时,框架会自动根据顺序逐个调用回调类。如果在PL框架中重写了configure_callbacks()方法,则以框架中的回调类优先。
- max_epochs:: 最大的训练周期。
- enable_progress_bar:: 是否显示进度条,默认将会为True。
- logger:: 传入一个Loggers的实例,默认会使用TensorBoard Logger。设置为
False
则会禁用日志功能。 - log_every_n_steps:: 日志记录的步长
- strategy:: 训练策略,如ddp, fsdp等。
- limit_train_batches:: 限制训练时的batch数量,一般在调试时使用。传入一个数字,当数字小于1时按比例计算【0.25,则使用Dataloader总数的25%的batch】;当数字大于1时按个数计算【5,则使用5个batch】
可选接口
Loggers
在PL中,继承自基类Logger
有多种log格式可选,比如MLflow Logger,CSV logger,TensorBoard Logger等等。可以根据自己的需要,使用不同的日志记录形式。此处着重介绍TensorBoard Logger。
TensorBoard Logger
调用该类,日志将会以tensorboard格式进行记录,训练结束后可以可视化看到训练过程。
TensorBoardLogger(_save_dir_, _name='lightning_logs'_, _version=None_, _log_graph=False_, _default_hp_metric=True_, _prefix=''_, _sub_dir=None_, _**kwargs_)
重要的参数是save_dir
,name
,version
。因为这将决定日志的保存位置:save_dir/name/version。在不同的训练阶段可以实例化不同的logger,就可以将不同的阶段的日志放置在不同路径,方便分析研究。
构建好Logger的实例后,作为参数传入到Trainer
中即可,以下是官方文档中的例子:
from lightning.pytorch import Trainer
from lightning.pytorch.loggers import TensorBoardLoggerlogger = TensorBoardLogger("tb_logs", name="my_model")
trainer = Trainer(logger=logger)
Callbacks
EarlyStopping
通过该类配置训练早停的策略。
EarlyStopping(_monitor_, _min_delta=0.0_, _patience=3_, _verbose=False_, _mode='min'_, _strict=True_, _check_finite=True_, _stopping_threshold=None_, _divergence_threshold=None_, _check_on_train_epoch_end=None_, _log_rank_zero_only=False_)
- monitor:: 监视指标。
- patience:: 传入一个整数n。默认情况下,每个epoch后都会检查指标的数值,当指标n次检查都一样时会触发早停。
- mode:: 可选max或min模式:max模式下,指标不再增长时会触发早停;min模式下,指标不再下降时会触发早停。
ModelCheckpoint
通过该类配置模型保存的保存策略。
ModelCheckpoint(_dirpath=None_, _filename=None_, _monitor=None_, _verbose=False_, _save_last=None_, _save_top_k=1_, _save_weights_only=False_, _mode='min'_, _auto_insert_metric_name=True_, _every_n_train_steps=None_, _train_time_interval=None_, _every_n_epochs=None_, _save_on_train_epoch_end=None_, _enable_version_counter=True_)
- dirpath & filename:: 模型文件将存储为dirpath/filename。
- monitor:: 评价指标,需要搭配save_top_k选项一起使用。
- save_top_k:: 传入一个整数n,指定保存模型的数量。
- n为0,不会保存模型。
- n为-1,会保存所有检查点时的模型。
- n大于2,模型会保存指标最好的n个模型。
ProgressBar
通过继承该类,重写成员方法,以按需求定制进度条的形式。
- get_metrics :: 可以从基类获得所有指标,然后返回想要显示的指标的字典
- print:: 定制进度条的输出样式。原文提到without breaking the progress bar.,应该是要注意输出的方式,比如不能重新刷新屏幕缓冲区?
相关文章:
快速上手Pytorch Lighting框架 | 深度学习入门
快速上手Pytorch Lighting框架 | 深度学习入门 前言参考官方文档 介绍快速上手基本流程常用接口LightningModule\_\_init\_\_ & setup()\*\_step()configure_callbacks()configure_optimizers()load_from_checkpoint Trainer常用参数 可选接口LoggersTensorBoard Logger Ca…...
ffmpeg多媒体(音视频)处理常用命令
概览 总结一些音视频常用的ffmpeg处理命令,会不断更新,涉及一些重要命令,各位读者也可在评论区不断更新,维护起来,希望可以帮助大家快速解决问题! 1、音频相关 1.1 音频信息查看 ffmpeg -i test.wav 该命…...
QT中的网络请求
一、主程序(main.cpp) #include <QCoreApplication> #include <QNetworkAccessManager> #include <QNetworkReply> #include <QNetworkRequest> #include <QUrlQuery> #include <QJsonDocument> #include <QJso…...
Nacos源码—6.Nacos升级gRPC分析二
大纲 1.Nacos 2.x版本的一些变化 2.客户端升级gRPC发起服务注册 3.服务端进行服务注册时的处理 4.客户端服务发现和服务端处理服务订阅的源码分析 4.客户端服务发现和服务端处理服务订阅的源码分析 (1)Nacos客户端进行服务发现的源码 (2)Nacos服务端处理服务订阅请求的源…...
如何选择自己喜欢的cms
选择内容管理系统cms what is cms1.whatcms.org2.IsItWP.com4.Wappalyzer5.https://builtwith.com/6.https://w3techs.com/7. https://www.netcraft.com/8.onewebtool.com如何在不使用 CMS 检测器的情况下手动检测 CMS 结论 在开始构建自己的数字足迹之前,大多数人会…...
前端面经 作用域和作用域链
含义:JS中变量生效的区域 分类:全局作用域 或者 局部作用域 局部作用域:函数作用域 和 块级作用域ES6 全局作用域:在代码中任何地方都生效 函数中定义函数中生效,函数结束失效 块级作用域 使用let或const 声明 作用域链:JS查…...
开启智能Kubernetes管理新时代:kubectl-ai让操作更简单!
在如今的科技世界中,Kubernetes 已经成为容器编排领域的标杆,几乎所有现代应用的基础设施都离不开它。然而,面对复杂的集群管理和日常运维,许多开发者常常感到无所适从。今天,我们将为大家介绍一款结合了人工智能的强大工具——kubectl-ai。它不仅能帮助开发者更加顺畅地与…...
STM32 ADC
目录 ADC简介 逐次逼近型ADC STM32 ADC框图 输入通道 转换模式 •单次转换,非扫描模式 •连续转换,非扫描模式 •单次转换,扫描模式 •连续转换,扫描模式 触发控制 数据对齐 转换时间 校准 硬件电路 A…...
nextjs站点地图sitemap添加
app/sitemap.xml/route.ts (主站点地图索引) sitemap.xml 为文件夹名称 route.ts代码如下: import { NextResponse } from next/server; import { url } from /config/navigation; export async function GET() {// const entries generateMonthlyEntries();con…...
TCP/IP和OSI对比
TCP/IP模型的实际特性 网络层(IP层) 仅提供无连接的不可靠服务:TCP/IP模型的网络层核心协议是IP(Internet Protocol),其设计是无连接且不可靠的。IP数据包独立传输,不保证顺序、不确认交…...
【hadoop】Hbase java api 案例
代码实现: HBaseConnection.java package com.peizheng.bigdata;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client…...
深入理解Spring缓存注解:@Cacheable与@CacheEvict
在现代应用程序开发中,缓存是提升系统性能的重要手段。Spring框架提供了一套简洁而强大的缓存抽象,其中Cacheable和CacheEvict是两个最常用的注解。本文将深入探讨这两个注解的工作原理、使用场景以及最佳实践。 1. Cacheable注解 基本概念 Cacheable…...
[git]如何关联本地分支和远程分支
主题 本文总结如何关联git本地分支和远程分支的相关知识点。 详情 查看本地分支 git branch 查看远程分支 git branch -r 查看所有分支(本地远程) git branch -a 查看本地分支及其关联的远程分支(如有) git branch -vv 关联本地分支到远程分支: git branch …...
Linux58 ssh服务配置 jumpserver 测试双网卡 为何不能ping通ip地址
判断为NAT模式网卡 能ping 通外网 ens34为仅主机模式网卡 [rootlocalhost network-scripts]# ip route show default default via 10.1.1.254 dev ens33 proto static metric 100 10.0.0.0/8 dev ens33 proto kernel scope link src 10.1.1.37 metric 100 11.0.0.0/8 dev…...
chart.js 柱状图Y轴数据设置起始值
事情的起因, 我以为是: chart.js 柱状图Y轴数据显示不全, 因为数据是浮点数, 换了整数测试还不行, 多次更换数据, 数据显示不全仍然存在, 而且是不固定位置的不显示。 直到相同数据换了折…...
算法题(142):木材加工
审题: 本题需要我们找到可以将木头切割至少k段的单段长度最长值 思路: 方法一:暴力解法 首先我们知道单段长度的最长值就是数组中数据的最大值max,所以我们可以遍历1~max的数据,将他们确定为l,然后计算出当…...
嵌入式学习--江协51单片机day3
今天学的东西挺多的,包括:自己设计的小应用,矩阵键盘,矩阵键盘密码锁,控制按键led流水灯,定时器时钟 (那个视频真的煎熬,连续两个1小时的简直要命,那个时钟也是听的似懂…...
Linux命令行参数注入详解
本文主要聚焦 Linux 系统及其 ELF 二进制文件,深入探讨参数注入的原理与防范措施。 核心术语解析 在进入主题之前,我们先厘清几个关键术语,以确保理解的准确性: 参数解析器 当程序被调用时,操作系统会向程序的 main…...
【HCIP】----OSPF综合实验
实验题目 实验需求: 1,R5为ISP,其上只能配置IP地址;R4作为企业边界路由器, 出口公网地址需要通过PPP协议获取,并进行chap认证 2,整个OSPF环境IP基于172.16.0.0/16划分; 3࿰…...
C++模板笔记
Cpp模板笔记 文章目录 Cpp模板笔记1. 为什么要定义模板2. 模板的定义2.1 函数模板2.1.1 函数模板的重载2.1.2 头文件与实现文件形式(重要)2.1.3 模板的特化2.1.4 模板的参数类型2.1.5 成员函数模板2.1.6 使用模板的规则 2.2 类模板2.3 可变参数模板 模板…...
二极管的动态特性
主要内容 二极管的单向导电特性并不十分理想,这是因为二极管的本质是有P型半导体和N型半导体接触形成的PN结。 PN结除了除了构成单向到点的二极管外,还存在一个结电容,这个结电容会导致"双向"导电。 也就是说,这会让二…...
WSL(Windows Subsystem for Linux)入门
目录 1.简介2.安装与配置3.常用命令4.进阶使用4.1 文件系统交互4.2 网络互通4.3 配置代理4.4 运行 GUI 程序4.5 Docker 集成 1.简介 WSL 是 Windows 系统内置的 Linux 兼容层,允许直接在 Windows 中运行 Linux 命令行工具和应用程序,无需虚拟机或双系统…...
k8s术语之secret
在kubernetes中,还存在一种和ConfigMap非常类似的对象,称之为Secret对象。它主要用于存储敏感信息,例如密码、密钥、证书等等。 首先使用base64对数据进行编码 rootmaster pvs ]# echo -n admin | base64 YWRtaW4 实例:隐藏mysql密…...
Vue2 中 el-dialog 封装组件属性不生效的深度解析(附 $attrs、inheritAttrs 原理)
Vue2 中 el-dialog 封装组件属性不生效的深度解析(附 $attrs、inheritAttrs 原理) 在使用 Vue2 和 Element UI 进行组件封装时,我们常会遇到父组件传入的属性不生效的情况,比如在封装的 el-dialog 组件中传入 width"100%&qu…...
使用Compose编排工具搭建Ghost博客系统
序:需要提前自备一台部署好docker环境的虚拟机,了解并熟练compose编排工具 在Centos7中,在线/离线安装Docker:https://blog.csdn.net/2301_82085712/article/details/147140694 Docker编排工具---Compose的概述及使用࿱…...
车载网络TOP20核心概念科普
一、基础协议与总线技术 CAN总线 定义:控制器局域网,采用差分信号传输,速率最高1Mbps,适用于实时控制(如动力系统)。形象比喻:如同“神经系统”,负责传递关键控制信号。 LIN总线 定…...
机器学习第一讲:机器学习本质:让机器通过数据自动寻找规律
机器学习第一讲:机器学习本质:让机器通过数据自动寻找规律 资料取自《零基础学机器学习》。 查看总目录:学习大纲 一、从婴儿学说话说起 👶 想象你教1岁宝宝认「狗」: 第一阶段:指着不同形态的狗&#x…...
Android ImageView 加载 Base64编码图片
在 Android 中显示服务端返回的 Base64 编码的 GIF 图片(如 data:image/gif;base64,...),需要以下步骤: 首先从字符串中分离出纯 Base64 部分(去掉 data:image/gif;base64, 前缀)image/gif 表示图片是 gif…...
如何使用 QuickAPI 推动医院数据共享 —— 基于数据仓库场景的实践
目录 01 医疗行业面临的数据孤岛问题 02 QuickAPI:将 SQL 变为数据 API 的利器 03 快速落地的应用实践 ✅ 步骤一:统一 SQL 逻辑,模块化管理 ✅ 步骤二:配置权限与调用策略 ✅ 步骤三:上线并接入调用 04 核心收…...
【5G通信】bwp和redcap 随手记 2
好的,让我们重新解释Cell-Defined BWP (CD BWP) 和 Non-Cell-Defined BWP (NCD BWP),并结合RedCap终端和非RedCap终端的应用进行说明。 一、定义 Cell-Defined BWP (CD BWP) 定义:由网络(基站)通过RRC信令为终端配置的…...
AI时代企业应用系统架构的新思路与CIO变革指南
作为制造企业CIO,我们看问题需要有前瞻性,AI时代企业应用系统架构需要进行全面转型。 一、新思想与新技术 1. 核心新思想 可视化开发AI的融合模式:不再只依赖纯代码开发或传统低代码,而是两者结合,通过AI理解自然语…...
kotlin JvmName注解的作用和用途
1. JvmName 注解的作用 JvmName 是 Kotlin 提供的一个注解,用于在编译为 Java 字节码时自定义生成的类名或方法名。 作用对象: 文件级别(整个 .kt 文件)函数、属性、类等成员 主要用途: 控制 Kotlin 编译后生成的 JV…...
为什么强调 RESTful 的无状态性?-优雅草卓伊凡
为什么强调 RESTful 的无状态性?-优雅草卓伊凡 RESTful 架构的核心原则之一是 无状态性(Statelessness),它要求 每次客户端请求必须包含服务器处理该请求所需的所有信息,服务器不会存储客户端的状态(如会话…...
信息系统项目管理工程师备考计算类真题讲解十五
一、决策论问题 分析:首先要明白几个概念: 1)最大最大准则(Maxmax):也称乐观主义准则,其决策原则为“大中取大” 2)最大最小准则(Maxmin):也称悲观主义准则,…...
android-ndk开发(9): undefined reference to `__aarch64_ldadd4_acq_rel` 报错分析
1. 概要 基础库 libbase.a 基于 android ndk r18b 编译, 被算法库 libfoo.so 和算法库 libbar.a 依赖, 算法库则分别被 libapp1.so 和 libapp2.so 依赖。 libapp1.so 的开发者向 libfoo.so 的开发者反馈了链接报错: error: undefined symb…...
Java 对象克隆(Object Cloning)详解
Java 对象克隆(Object Cloning)详解 对象克隆是指创建一个对象的精确副本,Java 提供了两种克隆方式:浅克隆(Shallow Clone)和深克隆(Deep Clone)。下面从实现原理、使用场景到注意事项全面解析。 一、克隆的基本概念 1. 为什么要克隆? 需要对象副本时避免修改原始对…...
Asp.Net Core IIS发布后PUT、DELETE请求错误405
一、方案1 1、IIS管理器,处理程序映射。 2、找到aspNetCore,双击。点击请求限制...按钮,并在谓词选项卡上,添加两者DELETE和PUT. 二、方案2 打开web.config文件,添加<remove name"WebDAVModule" />&…...
AI搜索的未来:技术纵深发展与关键突破路径
一、模型架构的颠覆性重构 1、混合专家系统(MoE)的工程化突破 动态路径选择:Google Gemini 1.5 Pro采用MoE架构,其门控网络(Gating Network)通过实时计算输入token与128个专家模型的余弦相似度,动态分配计算资…...
从艾米・阿尔文看 CTO 的多面特质与成长路径
在《对话 CTO,驾驭高科技浪潮》的开篇,艾米・阿尔文的经历如同一扇窗,为我们展现出首席技术官丰富而立体的世界。通过深入探究这一章节,我们能洞察 CTO 在技术领域前行所需的特质、面临的挑战,以及成长发展的脉络。 一…...
记录阿里云服务器搭建FTP服务器的注意事项
在阿里云服务器上(centos)系统,使用vsftpd搭建了一台FTP服务器。 搭建过程中,也留意到了操作防火墙放行端口。但搭建成功后,仍无法访问。 问题是:还需要在阿里云控制台设置一下。 在此记录。 1、登陆账…...
第二章 Logback的架构(三)
Logger, Appenders 和 Layouts 工作原理概述 在介绍了基本的Logback组件之后,我们现在可以描述当用户调用Logger的打印方法时,Logback框架日志请求的执行步骤。 现在让我们分析一下当用户调用名为com.wombat的Logger的info()方法时,Logback…...
第十六届蓝桥杯大赛软件赛C/C++大学B组部分题解
第十六届蓝桥杯大赛软件赛C/C大学B组题解 试题A: 移动距离 问题描述 小明初始在二维平面的原点,他想前往坐标(233,666)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用: 水平向右移动…...
服务器数据恢复—Linux操作系统服务器意外断电导致部分文件丢失的数据恢复
服务器数据恢复环境&故障: 一台安装linux系统的服务器意外断电。管理员重启服务器后进行检测,发现服务器上部分文件丢失。管理员没有进行任何操作,直接将服务器正常关机并切断电源。 服务器数据恢复过程: 1、北亚企安数据恢复…...
技术视界 | 青龙机器人训练地形详解(三):复杂地形精讲之台阶
在前两篇中,我们依次讲解了“如何创建一个地形”以及“如何将地形添加到训练环境中”。从基础出发,逐步构建机器人可交互的三维仿真环境。在机器人强化学习训练中,地形的复杂度决定了策略的泛化能力,仅靠 jump_plat 和 jump_pit 等…...
Android 位掩码操作(和~和|的二进制运算)
在 Android 开发中,位掩码操作通过二进制位的逻辑运算实现高效的状态管理。以下以 &(与)、|(或)和 ~(非)运算符为例,详细说明其二进制计算过程: 一、按位与 & 运…...
【JS逆向基础】前端基础-HTML与CSS
1,flask框架 以下是一个使用flask框架写成的serve程序 # noinspection PyUnresolvedReferences #Flash框架的基本内容from flask import Flask app Flask(__name__)app.route(/index) def index():return "hello index"app.route(/login) def login():re…...
高速供电,一步到位——以太联-Intellinet 9口2.5G PoE++非管理型交换机_562140:网络升级的理想之选
在数字化浪潮席卷全球的当下,高速稳定的网络连接已成为企业运营、家庭娱乐以及各类智能场景正常运转的基石。从企业办公场景中员工对高效协同办公的追求,到家庭环境里用户对流畅高清视频、在线游戏的渴望,再到智慧城市建设中大量监控设备、无…...
rom定制系列------红米note12 5G版miui14修改型号root版 原生安卓14批量线刷固件 原生安卓15等
红米Note 12 5G机型也称为 Note 12R Pro,机型代码:sunstone 高通骁龙4 Gen1八核处理器适用于以下型号的小米机型:22111317G, 22111317I, 22101317C miui14稳定版 14.0.10安卓13固件 根据客户需求,采用miui最后一个版本。修改以…...
机器学习 数据集
数据集 1. scikit-learn工具介绍1.1 scikit-learn安装1.2 Scikit-learn包含的内容 2 数据集2.1 sklearn玩具数据集介绍2.2 sklearn现实世界数据集介绍2.3 sklearn加载玩具数据集示例1:鸢尾花数据示例2:分析糖尿病数据集 2.4 sklearn获取现实世界数据集示…...
JVM运行时数据区域(Run-Time Data Areas)的解析
# JVM运行时数据区域(Run-Time Data Areas)的解析 欢迎来到我的博客:TWind的博客 我的CSDN::Thanwind-CSDN博客 我的掘金:Thanwinde 的个人主页 本文参考于:深入理解Java虚拟机:JVM高级特性与最佳实践 本文的JVM均…...