5.模型训练-毕设篇
vgg:
base_model_vgg13 = models.vgg13(pretrained=True)
base_model_vgg13.classifier[-1] = nn.Linear(4096, num_classes)
base_model_vgg13.to(device)(b_img_rgb.to(device)).shape

base_model_vgg13 = models.vgg13(pretrained=True)
作用:加载预训练的 VGG13 模型
-
models.vgg13
:PyTorch 提供的经典卷积神经网络模型 VGG13。 -
pretrained=True
:表示加载别人已经在 ImageNet 上训练好的参数,这样可以让模型学习得更快。 -
把它保存到变量
base_model_vgg13
中,后面就可以对它修改、训练、使用。
base_model_vgg13.classifier[-1] = nn.Linear(4096, num_classes)
作用:修改最后一层为适合你自己任务的输出层。
VGG 的最后一部分是一个 classifier
(全连接层序列),修改了其中最后一层([-1]
表示最后一层):
nn.Linear(4096, num_classes)
这表示:
-
输入是
4096
个神经元的特征; -
输出是你任务中的类别数(比如 ASL 就是 29 类)
关于4096是怎么来的
这是 VGG13 的模型结构中固定的输出维度。
vgg:
classifier = nn.Sequential(nn.Linear(25088, 4096), # 第一层全连接nn.ReLU(True),nn.Dropout(),nn.Linear(4096, 4096), # 第二层全连接nn.ReLU(True),nn.Dropout(),nn.Linear(4096, 1000), # 第三层(原始输出层)——这里要把它改成 num_classes
)
nn.Linear(4096, 1000) # 输出 ImageNet 的 1000 类 这是原来的最后一行
修改为:
nn.Linear(4096, num_classes) # 输出你自己的类别,比如 29 类
4096 是上一个全连接层输出的神经元个数,它已经被前面两层全连接层固定了,不需要你管。
base_model_vgg13.to(device)(b_img_rgb.to(device)).shape
这是你执行了 模型的前向传播(推理):
-
b_img_rgb.to(device)
:把一批图像数据放到 GPU 或 CPU 上。 -
base_model_vgg13.to(device)
:把模型放到 GPU 或 CPU 上。 -
然后你直接在模型后加
(b_img_rgb.to(device))
:就是在跑 forward(前向预测)。
vgg13的网络结构
表示卷积核大小是 3×3(也可能写作 3x3 Conv ) |
64 | 表示该层输出了 64 个“通道(feature maps)”,即这层的输出深度是 64 |
VGG13 的名字中 “13” 是什么意思?
表示它有 13 个“有学习参数的层”,即:
-
11 个卷积层(Conv)
-
2 个全连接层(FC)
Block 层级结构 输出通道数 输出尺寸(假设输入是 224×224) 输入 Input loss_fn = nn.CrossEntropyLoss()#创建一个交叉熵损失函数(CrossEntropyLoss) # 专门用来处理“多分类问题”(比如要分 29 个手语类别) optimizer = torch.optim.SGD(base_model_vgg13.parameters(), lr=1e-3) # 创建一个优化器,用来更新模型参数,让 loss 更小 # 使用的是“随机梯度下降”(SGD)方法,适合基础训练 # 参数说明: # base_model_vgg13.parameters():告诉优化器你要优化哪些参数(即整个模型的参数) # lr=1e-3:学习率(learning rate),意思是每次学习走多大的一步,这里是 0.001
3通道 (RGB) 224×224 Conv1 Conv(3→64), Conv(64→64), MaxPool 64通道 112×112 Conv2 Conv(64→128), Conv(128→128), MaxPool 128通道 56×56 Conv3 Conv(128→256), Conv(256→256), MaxPool 256通道 28×28 Conv4 Conv(256→512), Conv(512→512), MaxPool 512通道 14×14 Conv5 Conv(512→512), Conv(512→512), MaxPool 512通道 7×7 Flatten 展平为向量 - 25088 (即 512 × 7 × 7) FC1 Linear(25088 → 4096) - - FC2 Linear(4096 → 4096) - - FC3 Linear(4096 → 1000)(或自定义的 num_classes) - - Softmax(可选) 转成概率分布 - -
base_model_vgg13
是加载了预训练权重的 VGG13 卷积神经网络模型,就是训练、预测图像分类任务的“核心大脑”。
① 模型类型:VGG13 是一个中大型 CNN 网络
-
参数很多(大约 133M),比 ResNet18 大不少;
-
容易在小数据集上过拟合,所以不能设置太多 epoch;
-
需要一定轮数才能学好,但不能太多。
② 数据量:你训练的数据是 29,000 张图片
-
数据不算特别大;
-
如果没有做 数据增强(比如旋转、裁剪等),模型可能在 20 轮后就过拟合;
-
如果有增强,可以训练 30~50 轮,但要配合 EarlyStopping 提前停止。
③ 训练表现:是否收敛的关键指标是 验证集准确率和 loss 曲线
-
如果验证集准确率上升 → 可以继续训练;
-
如果验证准确率不升了、loss 不降了 → 提前停止;
-
用
early stopping
自动帮你判断。
loss_fn = nn.CrossEntropyLoss()#创建一个交叉熵损失函数(CrossEntropyLoss)
# 专门用来处理“多分类问题”(比如要分 29 个手语类别)
optimizer = torch.optim.SGD(base_model_vgg13.parameters(), lr=1e-3)
# 创建一个优化器,用来更新模型参数,让 loss 更小
# 使用的是“随机梯度下降”(SGD)方法,适合基础训练
# 参数说明:
# base_model_vgg13.parameters():告诉优化器你要优化哪些参数(即整个模型的参数)
# lr=1e-3:学习率(learning rate),意思是每次学习走多大的一步,这里是 0.001
# 自定义 EarlyStopping 类
class EarlyStopping:def __init__(self, patience=5, delta=0):"""patience: 可以容忍多少个 epoch 验证集 loss 没有改善delta: 认为“改善”的最小变化值(例如改善了0.0001也算)"""self.patience = patienceself.delta = deltaself.counter = 0self.best_loss = Noneself.early_stop = Falsedef __call__(self, val_loss):if self.best_loss is None:self.best_loss = val_losselif val_loss > self.best_loss - self.delta:self.counter += 1print(f"验证集 loss 没有改善 ({self.counter}/{self.patience})")if self.counter >= self.patience:self.early_stop = Trueelse:self.best_loss = val_lossself.counter = 0return self.early_stop
# 设置总共训练轮数为 25 轮(epoch)
epochs = 25# 创建 EarlyStopping 实例:
# 如果验证集 loss 连续 5 轮(patience=5)没有改善超过 delta=0.001,就提前停止训练
early_stopping = EarlyStopping(patience=5, delta=0.001)# 初始化列表,用来保存每一轮训练和测试的 loss 与 准确率,方便后续画图或分析
train_loss_list = [] # 存每一轮训练集的损失值
train_acc_list = [] # 存每一轮训练集的准确率
test_loss_list = [] # 存每一轮测试集(验证集)的损失值
test_acc_list = [] # 存每一轮测试集的准确率# Step 2:开始训练循环,总共训练 epochs 轮
for t in range(epochs):# 打印当前是第几轮(t 从 0 开始,所以要 +1)print(f"Epoch {t+1}\n-------------------------------")# 调用 train() 函数,在当前 epoch 对模型进行训练train(train_dataloader, base_model_vgg13, loss_fn, optimizer)# 用 test() 函数在训练集上评估效果(得到 loss 和 accuracy)train_loss, train_correct = test(train_dataloader, base_model_vgg13, loss_fn)# 用 test() 函数在测试集(验证集)上评估效果test_loss, test_correct = test(test_dataloader, base_model_vgg13, loss_fn)# 把每一轮的结果存进列表中,方便后续画图train_loss_list.append(train_loss)train_acc_list.append(train_correct)test_loss_list.append(test_loss)test_acc_list.append(test_correct)# Step 3:判断是否触发 EarlyStopping(如果 test_loss 没有继续下降,就触发)if early_stopping(test_loss):print("早停触发,提前结束训练!")break # 终止训练循环
下次改为训练20轮,这个训练时间尤其得长
模块 | 解释 | 用处 |
---|---|---|
可视化训练过程 | 用图表展示 loss / accuracy 的变化 | 看模型是否收敛、是否过拟合 |
模型验证集预测 | 用模型对测试集/验证集做预测 | 得到预测结果和概率 |
分类报告(classification report) | 输出每一类的 precision、recall、f1-score | 了解每类预测效果 |
混淆矩阵(confusion matrix) | 显示每类预测对/错的次数 | 可视化分类错误在哪些kesuu |
可视化
如果在训练中途突然换了 GPU(或 Colab 自动断线 / 切换 GPU):
-
训练是不会自动从中断的地方继续的。
-
所有内存内容(模型、optimizer、训练状态)会丢失。
-
即使保存了代码,也要从头开始,除非自己手动保存了模型状态。
相关文章:
5.模型训练-毕设篇
vgg: base_model_vgg13 models.vgg13(pretrainedTrue) base_model_vgg13.classifier[-1] nn.Linear(4096, num_classes) base_model_vgg13.to(device)(b_img_rgb.to(device)).shapebase_model_vgg13 models.vgg13(pretrainedTrue) 作用:加载预训练的…...
[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议
第一步:先理解最基础的关系(类比快递) 假设你要给朋友寄快递: Wi-Fi:相当于“公路和卡车”,负责把包裹从你家运到快递站。 TCP/UDP:相当于“快递公司的运输规则”。 TCP:顺丰快递&…...
【含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现
项目介绍 本课程演示的是一款基于Python的股票数据可视化及推荐系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…...
LeetCode算法题(Go语言实现)_23
题目 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。 如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。 一、代码实现 func equalPairs…...
Windows家庭版如何开启Hyper-V与关闭Hyper-V
在Windows中如果要安装桌面版Docker,那么Hyper-V一定是需要开启的,在专业版操作系统上,这个功能直接就可以勾选开启,重启之后就即可生效,但在家庭版的操作系统上,默认是没有这个选择项的,这时候我们就需要借助于命令去开启它。本文,整理了一键开启Hyper-V服务和一键关闭…...
C# 中充血模型和贫血模型
在C#中,充血模型(Rich Domain Model)和贫血模型(Anemic Domain Model)是两种截然不同的领域建模方式,核心区别在于业务逻辑的归属。以下是通俗易懂的解释: 1. 贫血模型ÿ…...
C++中的继承
#include <iostream> using namespace std;// 武器类(基类) class Weapon { protected:int atk; // 攻击力public:// 构造函数Weapon(int atk 0) : atk(atk) {}// 虚拟析构函数virtual ~Weapon() {}// set 和 get 接口void setAtk(int atk) {this…...
Uubuntu20.04复现SA-ConvONet步骤
项目地址: tangjiapeng/SA-ConvONet: ICCV2021 Oral SA-ConvONet: Sign-Agnostic Optimization of Convolutional Occupancy Networks 安装步骤: 一、系统更新 检查系统是否已经更新到最新版本: sudo apt-get update sudo apt-get upgra…...
Blender模型导入虚幻引擎设置
单位系统不一致 Blender默认单位是米(Meters),而虚幻引擎默认使用**厘米(Centimeters)**作为单位。 当模型从Blender导出为FBX或其他格式时,如果没有调整单位,虚幻引擎会将1米(Blen…...
大数据Spark(五十五):Spark框架及特点
文章目录 Spark框架及特点 一、Spark框架介绍 二、Spark计算框架具备以下特点 Spark框架及特点 一、Spark框架介绍 Apache Spark 是一个专为大规模数据处理而设计的快速、通用的计算引擎。最初由加州大学伯克利分校的 AMP 实验室(Algorithms, Machines, and Pe…...
深入理解Python asyncio:从入门到实战,掌握异步编程精髓
文章目录 前言一、asyncio基础概念1.1 什么是异步编程?1.2 asyncio核心组件 二、asyncio核心用法详解2.1 事件循环管理2.2协程与任务2.3 异步上下文管理器 三、asyncio高级特性3.1 异步生成器3.2异步队列3.3 异步锁和信号量 四、asyncio实战项目4.1 高性能Web爬虫4.…...
线段树,单点,区间修改查阅
#PermanentNotes/algorithm 思想 首先关于树有许多类型,这里我们主要首线段树,整体思想就是将一个大区间进行拆分,拆分成各个小区间,在我们进行查找,更新时,就是对区间的查找更新 类型 初始化,构建树 代码 const int Z 1e7; const ll INF 1e18; const int maxn 1e5 10…...
音视频(二)ffmpeg编译及推流
FFmpeg 大名鼎鼎,就不多介绍了 1:环境 win11_amd64 ffpmeg download:https://git.ffmpeg.org/ffmpeg.git ffmpeg msys2 download:https://www.msys2.org/ vs2022 (c 写demo用) 用别的也行 usb2.0 摄像头(有点老) opencv 看上传的…...
syslog 与 Linux 内核日志系统全面解析
在 Linux 系统中,日志是进行系统调试、故障排查和系统安全分析的重要手段。syslog 和内核日志是 Linux 日志组成的核心组件。本文将从原理、实现、配置、常见问题分析等综合解析,全面解读 Linux 下的日志机制。 一、syslog 系统概述 1.1 什么是 syslog …...
SQL问题分析与诊断(8)——关键信息(2)
8.2. 关键信息 8.2.2. 警告 查询计划中,可能会看到出现于操作符上的小图标,特别是黄色或红色的感叹号。这些图标都是警告。并非每个警告都指示一个严重问题,但发现时请检查该图标的属性窗口,其将包含该警告图标的具体细节。 8.…...
HCIA/HCIP基础知识笔记汇总
HCIA/HCIP基础知识笔记汇总 ICT产业链: 上游:芯片制造、元器件生产、光纤光缆制造 中游:硬件组装、软件开发、网络建设维护 下游:电信服务、互联网服务、终端产品 VLAN端口类型: access :…...
vue3 动态路由
定义: 对路由的添加通常是通过 routes 选项来完成的,但是在某些情况下,你可能想在应用程序已经运行的时候添加或删除路由 1. 动态添加路由规则 场景 在应用初始化时,可能需要根据用户的角色或权限动态添加路由规则。 实现 im…...
《Linux内存管理:实验驱动的深度探索》大纲
《Linux内存管理:实验驱动的深度探索》 ——通过递进式实验与问题剖析,从入门到精通 第一部分:初探内存——基础概念与简单实验 目标:理解内存的基本行为,学会观察和提问 第1章 内存初体验:从"free…...
【C语言】深入理解指针(五):sizeof、strlen与数组指针的那些事儿
前言 在C语言的学习中,指针始终是一个让人又爱又恨的话题。它强大而灵活,但同时也充满了陷阱。今天,我们就来深入探讨一下指针相关的几个重要知识点:sizeof和strlen的区别,以及数组和指针在笔试题中的那些常见问题。希…...
CMake学习-- install 指令详细说明
目录 CMake中install命令的用法背景知识使用方法项目结构示例代码CMakeLists.txt构建和安装 详细介绍安装库和头文件安装可执行文件安装额外的文件安装目录结构使用安装的库 总结 CMake中install命令的用法 背景知识 在软件开发过程中,构建和安装是两个重要的环节…...
Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpmyum clean allyum macache fast 编辑配置文件 /etc/yum.repos.d/zabbix.repo and enable zabbix-frontend repository. [zabbix-frontend]...enabled1... 下载相关…...
uniapp 微信小程序 使用ucharts
文章目录 前言一、组件功能概述二、代码结构分析2.1 模板结构 总结 前言 本文介绍一个基于 Vue 框架的小程序图表组件开发方案。该组件通过 uCharts 库实现折线图的绘制,并支持滚动、缩放、触摸提示等交互功能。文章将从代码结构、核心方法、交互实现和样式设计等方…...
空调开机启动后发出噼里啪啦的异响分析与解决
背景 当空调使用时由于制冷或制热运转时(关机后可能也会出现),塑料件热胀冷缩引起,可能会出现“咔咔”的声音;空调冷媒在空调内管路流动时会出现轻微的“沙沙”的声音;也有可能是新装的空调摆风轴出现响声…...
Python爬虫第3节-会话、Cookies及代理的基本原理
目录 一、会话和Cookies 1.1 静态网页和动态网页 1.2 无状态HTTP 1.3 常见误区 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬虫代理 2.4 代理分类 2.5 常见代理设置 一、会话和Cookies 大家在浏览网站过程中,肯定经常遇到需要登录的场景。有些…...
《自然-方法》2024年度技术:空间蛋白质组学(spatial proteomics)
李升伟 编译 《自然-方法》第21卷 2195-2196页 (2024) 解析组织空间蛋白质组的技术,正成为图谱级研究项目的基石。这些项目正在兑现其承诺,帮助人类理解健康和疾病状态下的生物复杂性。 人类天生充满探索欲。我们热爱勘测未知疆域,并随之绘…...
pip安装timm依赖失败
在pycharm终端给虚拟环境安装timm库失败( pip install timm),提示你要访问 https://rustup.rs/ 来下载并安装 Rust 和 Cargo 直接不用管,换一条命令 pip install timm0.6.13 成功安装 简单粗暴...
【工具变量】全国分省低空经济高质量发展数据(2012-2023年)
测算方式:参考CSSCI《北京航空航天大学学报(社会科学版)》沈映春(2024)老师的做法,如商图指标构建图所示。 包含内容: 样例代码: 样例数据: 参考文献:沈映春,张豪兴.数字基础设施建设…...
【Kubernetes】如何使用 kubeadm 搭建 Kubernetes 集群?还有哪些部署工具?
使用 kubeadm 搭建 Kubernetes 集群是一个比较常见的方式。kubeadm 是 Kubernetes 提供的一个命令行工具,它可以简化 Kubernetes 集群的初始化和管理。下面是使用 kubeadm 搭建 Kubernetes 集群的基本步骤: 1. 准备工作 确保你的环境中有两台或更多的机…...
Java 枚举类 Key-Value 映射的几种实现方式及最佳实践
Java 枚举类 Key-Value 映射的几种实现方式及最佳实践 前言 在 Java 开发中,枚举(Enum)是一种特殊的类,它能够定义一组固定的常量。在实际应用中,我们经常需要为枚举常量添加额外的属性,并实现 key-value 的映射关系。本文将详细…...
JavaScript instanceof 运算符全解析
JavaScript instanceof 运算符全解析 核心语义: 判断一个对象(object)是否属于某个构造函数(constructor)或类的实例,基于原型链(prototype chain)实现类型检测。 一、JavaScript 中的基础用法 1. 语法结构 object instanceof constructor 返回值:布尔值(true/fal…...
问题大集09-如何实现vite创建的react项目的配置别名路径@
(1)如何实现vite创建的react项目的配置别名路径 1)直接修改 Vite 配置文件 ①打开项目根目录下的 vite.config.js 文件(如果没有则新建),添加 resolve.alias 配置(新增resolve部分)…...
鸿蒙开发_TS快速入门_TS中模块化操作_模块的导入导出---纯血鸿蒙HarmonyOS5.0工作笔记008
然后我们再来看鸿蒙中的模块如何导入导出。 其实就跟Java中的import是一个意思的。 只不过我们如果想把一个类中的某个方法导入到另一个类中, 那么首先要在这个类中去导出这个方法。 可以看到导出的关键字是export。 然后导入的关键字是import。 然后我们写个例子去看一下,…...
算法设计与分析之“分治法”
分治法(Divide and Conquer)是一种高效的算法设计策略,其核心思想是将复杂问题分解为多个子问题,递归求解后再合并结果。以下是分治法的详细介绍: 一、分治法的基本步骤 分治法遵循以下三步流程: 分解&…...
java 静态内部类
java 静态内部类 一、位置二、特点三、静态内部类的实例化四、代码示例一:演示特点一五、代码示例二:演示特点二六、代码实例三:演示特点三七、代码实例四:演示特点四 文章同步更新(更好的排版):…...
Axure疑难杂症:完美解决文本框读取、赋值、计数(玩转文本框)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:玩转文本框 主要内容:文本框读取、赋值、验证、计数 应用场景:验证码、文本限制、文本取值、文本赋值等场景 案例展示&…...
Python数据可视化-第2章-使用matplotlib绘制简单图表
环境 开发工具 VSCode库的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本书为《Python数据可视化》一书的配套内容,本章为第2章 使用matplotlib绘制简单图表 本文主要介绍了折线图、柱形图或堆积柱形图、条形图或堆积条形图、堆积面积图、直方图、饼图或…...
国产系统服务器识别不到SATA盘
在使用浪潮、海光、华三等系列服务器安装操作系统的时候提示没有足够的存储空间,其实是有两块512的SATA硬盘的,但是他没有识别到。 需要给硬盘做raid存储阵列才能让系统识别到他,下面是在BIOS中配置RAID的方法。 1、重启机器,按下…...
解决小程序video控件在真机和上线后黑屏不播放问题
小程序上线后,mp4格式的视频无法点击是黑屏,但是测试得时候在微信开发者工具中能够打开正常播放 原因:编码格式不能是vp9 微信开发者工具本地设置中把这个打开勾选。 排查:可以换一个视频尝试能不能真机播放,如果能&a…...
Vue3编译器深度解析:从模板编译到极致性能优化
一、编译技术架构演进 1.1 Vue2到Vue3编译架构升级 1.2 编译阶段性能基准对比 优化项Vue2编译耗时Vue3编译耗时性能提升模板解析速度12ms/千节点3ms/千节点75%AST遍历速度8ms/层级2ms/层级68%代码生成速度15ms/组件4ms/组件73%内存占用峰值84MB32MB62% 二、模板编译核心过程 …...
Google Gemini 2.0 网页抓取真丝滑
网页抓取从未如此简单——这一切都要归功于谷歌突破性的多模态实时API Gemini 2.0 借助这个工具,你可以毫不费力地从任何网页提取数据,无论页面结构多么复杂、内容多么杂乱无章,或是需要提取非常特定的信息。 今天,我将通过自己实…...
Leetcode-100 二分查找常见操作总结
二分查找常见操作总结 1. 基本二分查找 目标: 在有序数组 nums 中查找 target 的索引(如果存在)。 适用场景: 需要在 有序数组 中查找某个特定元素。适用于无重复元素的情况。 示例: 输入 nums [1, 2, 3, 4, 5], target 3,输出 2。 d…...
Android: Handler 的用法详解
Android 中 Handler 的用法详解 Handler 是 Android 中用于线程间通信的重要机制,主要用于在不同线程之间发送和处理消息。以下是 Handler 的全面用法指南: 一、Handler 的基本原理 Handler 基于消息队列(MessageQueue)和循环器(Looper)工作ÿ…...
第149场双周赛:找到字符串中合法的相邻数字、重新安排会议得到最多空余时间 Ⅰ、
Q1、找到字符串中合法的相邻数字 1、题目描述 给你一个只包含数字的字符串 s 。如果 s 中两个 相邻 的数字满足以下条件,我们称它们是 合法的 : 前面的数字 不等于 第二个数字。两个数字在 s 中出现的次数 恰好 分别等于这个数字本身。 请你从左到右…...
深入解析Translog机制:Elasticsearch的数据守护者
一、为什么需要Translog? Elasticsearch的数据写入流程是先写入内存缓冲区,然后定期刷新到磁盘生成Lucene分段。由于内存数据易失性,若在刷新前发生宕机,未持久化的数据将永久丢失。Translog的诞生正是为了解决这一数据可靠性问题…...
音视频入门基础:MPEG2-TS专题(25)——通过FFmpeg命令使用UDP发送TS流
音视频入门基础:MPEG2-TS专题系列文章: 音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载 音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件 音视频入门基础…...
3、nFR52xx蓝牙学习(点亮第一个LED灯)
一、点灯代码: led.h文件 #ifndef __LED_H #define __LED_H#include "nrf52840.h"#define LED_0 NRF_GPIO_PIN_MAP(0,13) #define LED_1 NRF_GPIO_PIN_MAP(0,14) #define LED_2 NRF_GPIO_PIN_MAP(0,15) #define LED_3 …...
符号秩检验
内容来源 非参数统计(第2版) 清华大学出版社 王星 褚挺进 编著 符号秩检验 在符号检验的基础上,增加了数据绝对值大小的信息 检验统计量 用一个简单的例子来说明 样本数据 X i , i 1 , ⋯ , 6 X_i,i1,\cdots,6 Xi,i1,⋯,6 如下 X …...
制造业数字化转型:流程改造先行还是系统固化数据?基于以MTO和MTS的投资回报分析
1. 执行摘要 制造业正经历一场深刻的数字化转型,企业面临着先进行流程改造以优化运营,还是直接上线系统以固化数据的战略选择。本文深入分析了以销定产(MTO)和以产定销(MTS)两种主要生产模式下,…...
python相关笔记
一。 is和的区别 1.is看的是发票逻辑地址,用来判断两个变量是否引用同一个对象,is关注的是‘身份’ 2.判断两个对象是否具有相同的值,关注的是内容是否相等,也即值是否相等。 3. if x is None: print(x is None")...
C++(匿名函数+继承+多态)
#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory>using namespace std;// 基类 Weapon class Weapon { protected:int atk; public:Weapon…...