记7(激活函数+多层神经网络+梯度下降法及其优化
目录
- 1、激活函数
- 1.1、sigmoid函数:2端饱和,下面2个函数都要幂运算,运算速度会比较慢
- 1.2、ReLU函数(Rectified Linear Unit,修正线性单元)
- 1.3、PReLU函数(Parameteric Rectified Linear Unit,参数化修正线性单元)
- 1.4、RReLU函数(Randomized Leaky Rectified Linear Unit,随机纠正线性单元):
- 2、鸢尾花分类——实现多层神经网络:
- 3、梯度下降法
- 4、优化
1、激活函数
激活函数:为了模拟非线性问题,又不能使得问题过于复杂,可以设计神经元对输入信号进行线性处理,得到的线性结果再输入非线性激活函数
- 激活函数的特点:包含充分的梯度信息;能够识别阈值
1.1、sigmoid函数:2端饱和,下面2个函数都要幂运算,运算速度会比较慢
- 对数几率函数logistic是典型的sigmoid函数:但是它不是以0为中的,在多层神经网络中可能产生偏移,可能使得梯度下降的速度变慢(可以使用双曲正切函数代替)
- 双曲正切函数Tanh
- 上述logistic函数的导函数,可见:
梯度消失问题:例如在logistic函数的导函数取值在00.25之间,神经网络每一层都会将多个00.25相乘,误差在每一层不断衰减,网络层数较深时梯度值趋近于0,参数更新几乎停滞。
1.2、ReLU函数(Rectified Linear Unit,修正线性单元)
- 优点:z>0时,导数=1,缓解了梯度消失问题(只有z≤0时才会饱和);
- 缺点:输出不是以0为均值;z≤0时,梯度=0,神经元死亡(无法更新)(可以使用Leaky-ReLU函数)
1.3、PReLU函数(Parameteric Rectified Linear Unit,参数化修正线性单元)
y = { z z≥0 a z z<0 ,a:可训练参数 y= \begin{cases} z& \text{z≥0}\\ az& \text{z<0 ,a:可训练参数} \end{cases} y={zazz≥0z<0 ,a:可训练参数
1.4、RReLU函数(Randomized Leaky Rectified Linear Unit,随机纠正线性单元):
类比上一个,不同在与
- 训练阶段:z<0部分的斜率是随机分配的,服从均匀分布
- 测试阶段:z<0部分的斜率 是固定的,取训练阶段所有a的平均值
2、鸢尾花分类——实现多层神经网络:
(单层的见机器学习笔记6“鸢尾花数据集——单层前馈型神经网络”)
- 增加一个隐含层并设定隐含层有16个节点
- 从输入层到隐含层:B1的shape=(16,),又因为输入有4个节点(鸢尾花的4个属性),所以W1的shape=(4,16)
- 从隐含层到输出层:因为输出层有3个输出节点,所以B2.shape=(3,),W2.shape=(16,3)
- 隐含层激活函数:relu函数;输出层激活函数:softmax函数;损失函数:交叉熵损失函数
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
#读取文件,详见Python笔记10
train_path=tf.keras.utils.get_file("iris.csv", origin=None) #获取文件的绝对路径
df_iris=pd.read_csv(train_path,header=0) #结果是panda的二维数据表
iris=np.array(df_iris) #将二维数据表类型转化为二维数组类型,shape=(150,6),与视频中不一样,索引号为0的是序号
x=iris[:,1:5] #索引号1~4列属性:花瓣长度和宽度,x.shape=(150, 2)
y=iris[:,5] #train_y.shape=(150,)x_svv=np.concatenate((np.stack(x[y=='setosa']), #选取2种花,以及其前2种属性np.stack(x[y=='versicolor']),np.stack(x[y=='virginica'])),axis=0)
y_svv=np.concatenate((np.zeros(np.where(y=='setosa')[0].size), #元组只有一个元素(数组)np.ones(np.where(y=='versicolor')[0].size),2*np.ones(np.where(y=='virginica')[0].size),),axis=0)np.random.seed(612)
iris_rand=np.concatenate((x_svv,np.expand_dims(y_svv,axis=1)),axis=1)
np.random.shuffle(iris_rand) #打乱数组,并选前面120条数据为训练集,后面30条做测试集
x_train=tf.constant(iris_rand[:120,0:4],dtype=tf.float32) #转化为float32张量
y_train=tf.constant(iris_rand[:120,4],dtype=tf.int64) #转化为int32张量
x_test=tf.constant(iris_rand[120:,0:4],dtype=np.float32)
y_test=tf.constant(iris_rand[120:,4],dtype=tf.int64)X_train=x_train-tf.reduce_mean(x_train,axis=0) #中心化, x_train.dtype=dtype('O'),是object
X_test=x_test-tf.reduce_mean(x_test,axis=0)
Y_train=tf.one_hot(y_train,3) #转化为独热编码Y_train.shape=TensorShape([120, 3])
Y_test=tf.one_hot(y_test,3)learn_rate=0.5 #超参数——学习率
iter=50 #迭代次数
display_step=10 #设置每迭代10次输出结果,方便查看
np.random.seed(612)
W1=tf.Variable(np.random.randn(4,16),dtype=tf.float32) #W1列向量,4行16列
B1=tf.Variable(np.zeros([16]),dtype=tf.float32) #B1列向量,长度为16的一维张量
W2=tf.Variable(np.random.randn(16,3),dtype=tf.float32) #W2列向量,16行3列
B2=tf.Variable(np.zeros([3]),dtype=tf.float32) #B2列向量,长度为3的一维张量cce_train=[] #保存交叉熵损失
cce_test=[]
acc_train=[] #保存准确率
acc_test=[]#训练模型
for i in range(0,iter+1):with tf.GradientTape() as tape:#relu函数和softmax函数,Hidden_train是120*16的张量,每行16个元素表示隐含层16个节点(就是输入层的输出端有16个),同理PRED_train是16*3Hidden_train=tf.nn.relu(tf.matmul(X_train,W1)+B1) #shape=TensorShape([120, 16])PRED_train=tf.nn.softmax(tf.matmul(Hidden_train,W2)+B2) #shape=TensorShape([16, 3])Loss_train=tf.reduce_mean(tf.keras.losses.categorical_crossentropy(y_true=Y_train, y_pred=PRED_train))Hidden_test=tf.nn.relu(tf.matmul(X_test,W1)+B1) #shape=TensorShape([120, 16])PRED_test=tf.nn.softmax(tf.matmul(Hidden_test,W2)+B2) #shape=TensorShape([16, 3])Loss_test=tf.reduce_mean(tf.keras.losses.categorical_crossentropy(y_true=Y_test, y_pred=PRED_test))#准确率,求PRED_train的每一行3个元素的max,即属于对应标签的概率最大,再与真实值y_train比较,求得准确率Accuracy_train=tf.reduce_mean(tf.cast(tf.equal(tf.argmax(PRED_train,axis=1),y_train),tf.float32))Accuracy_test=tf.reduce_mean(tf.cast(tf.equal(tf.argmax(PRED_test,axis=1),y_test),tf.float32)) cce_train.append(Loss_train)cce_test.append(Loss_test)acc_train.append(Accuracy_train)acc_test.append(Accuracy_test)grads=tape.gradient(Loss_train,[W1,B1,W2,B2])W1.assign_sub(learn_rate*grads[0])B1.assign_sub(learn_rate*grads[1])W2.assign_sub(learn_rate*grads[2])B2.assign_sub(learn_rate*grads[3])if i%display_step==0:print("i:%i,\tTrainAcc:%f,TrainLoss:%f\tTestAcc:%f,TestLoss:%f" %(i,Accuracy_train,Loss_train,Accuracy_test,Loss_test))#可视化,图1准确率,图2损失函数
plt.figure(figsize=(10,3))
plt.subplot(121)
plt.plot(cce_train,color="blue",label="train")
plt.plot(cce_test,color="red",label="test")
plt.xlabel("Iteration")
plt.ylabel("Loss")
plt.subplot(122)
plt.plot(acc_train,color="blue",label="train")
plt.plot(acc_test,color="red",label="test")
plt.xlabel("Iteration")
plt.ylabel("Accuracy")
plt.tight_layout() #自动调整子图
plt.show()输出:
i:0, TrainAcc:0.466667,TrainLoss:2.097793 TestAcc:0.266667,TestLoss:2.108944
i:10, TrainAcc:0.933333,TrainLoss:0.204642 TestAcc:0.833333,TestLoss:0.344889
i:20, TrainAcc:0.966667,TrainLoss:0.141266 TestAcc:0.866667,TestLoss:0.294079
i:30, TrainAcc:0.958333,TrainLoss:0.110132 TestAcc:0.833333,TestLoss:0.286544
i:40, TrainAcc:0.966667,TrainLoss:0.090271 TestAcc:0.833333,TestLoss:0.290193
i:50, TrainAcc:0.966667,TrainLoss:0.076929 TestAcc:0.800000,TestLoss:0.305203
3、梯度下降法
批量梯度下降(前面介绍 的梯度下降法就是这个)(Batch Gradient Descent, BGD)
- 每次迭代都使用所有样品来计算偏导数:
- 每一步都是准确地朝着极值点趋近,迭代次数少,但每次迭代的计算量大,训练时间长,因而不适合大规模数据集
- 可以利用向量运算进行并行计算
- 收敛于全局或局部极小值点
随机梯度下降(Stochastic Gradient Descent, SGD):
- 每次迭代只选择一个样本训练模型,直到将所有样本都训练一遍,这叫做“一轮”。一轮后对最后一个样品的误差很少,但是后一个样本更新可能导致对上一个样品的效果变差
- 反复训练多轮,直到神经网络对所有样本的误差足够小
- 参数更新非常频繁,训练轮数多,无法快速收敛
小批量梯度下降(Mini-Batch Gradient Descent, MBGD)
- 也叫小批量随机梯度下降(Mini-Batch SGD)
- 把数据集分为多个小批量,每次迭代使用一个小批量来训练模型,参数更新公式:
- 将训练集划分为多个小批量,每次迭代只选择一个小批量训练模型,直到将所有样本都训练一遍,这叫做“一轮”。(固定数目的小批量=1个样品–>随机梯度下降)需要多轮
- 每次迭代的训练样本数固定,与整个训练集的样本数量无关(假设每个小批量200个样本,那么若有2000个样本就分为10批,若有20000个样本就分为100批)
- 并行,大规模数据集
- 小批量的选取是基于抽样,存在偏差,就好像噪声,一定程度上提高模型的泛化能力
4、优化
- 打乱样品
- 并行时,采用2的幂数作为批量大小,如32、64、128…,可以充分利用处理器资源
- 动态调整学习率:学习率衰减(Learning Rate Decay)/学习率退火(Learning Rate Annealing)
周期性地增大学习率
自适应调整学习率(统一调整各个参数的学习率)
自适应调整每个参数的学习率:
- AdaGrad算法:
先全局学习率η,各个参数的学习率表达式如下,将每次迭代的梯度取平方累加,再加上ε(保证分母非0),再开方,用全局学习率除以这个根号。
学习率随着 迭代次数增加而减少。
当某参数梯度比较大,则学习率衰减比较快(学习率变得更小了),当梯度比较小,则学习率衰减比较慢
η ∑ r = 1 t ( g r a d r ) 2 + ε \dfrac{\eta}{\sqrt{\sum ^t_{r=1}(grad_r)^2+\varepsilon }} ∑r=1t(gradr)2+εη- RMSprop算法和AdaDelta算法是对AdaGrad算法的改进,各个参数的学习率不是单调递减的
- 梯度估计:(如果小批量的样品中含有较多的噪声,那么梯度更新就会十分不稳定
动量梯度下降法(Momentum):
- 动量=质量×速度
- 小球下山模型:下山坡度比较大,那么速度积累比较大,如果坡度比较小甚至坡度上升,那么小球速度就变慢
- 在更新参数时,可以在一定程度上保留之前的更新方向
- 参数更新公式:以前的梯度会累积,但是会以α衰减
但是最低点时动量过大,会使得一下子越过最小值,到达其他局部最小值
- 牛顿加速梯度算法(Nesterov Accelerated Gradient, NAG)
(就是先预计下一步的参数,到了下一步再对之前的估计进行修正)
根据当前更新方向,估算下一步的梯度方向(是计算超前梯度,而不是计算当前的梯度,再用超前梯度修正当前的梯度,提高了算法的遇见能力,避免大幅震荡)
在新位置计算梯度,修正上面估计的梯度方向
- Adam:
可以看做是RMSprop+Momentum,而Nadam=Adam+NAG
相关文章:
记7(激活函数+多层神经网络+梯度下降法及其优化
目录 1、激活函数1.1、sigmoid函数:2端饱和,下面2个函数都要幂运算,运算速度会比较慢1.2、ReLU函数(Rectified Linear Unit,修正线性单元)1.3、PReLU函数(Parameteric Rectified Linear Unit&am…...
Qt u盘自动升级软件
Qt u盘自动升级软件 Chapter1 Qt u盘自动升级软件u盘自动升级软件思路:step1. 获取U盘 判断U盘名字是否正确, 升级文件是否存在。step2. 升级step3. 升级界面 Chapter2 Qt 嵌入式设备应用程序,通过U盘升级的一种思路Chapter3 在开发板上运行的…...
关于低代码技术架构的思考
我们经常会看到很多低代码系统的技术架构图,而且经常看不懂。是因为技术架构图没有画好,还是因为技术不够先进,有时候往往都不是。 比如下图: 一个开发者,看到的视角往往都是技术层面,你给用户讲React18、M…...
如何使用 ChatBox AI 简化本地模型对话操作
部署模型请看上一篇帖子:本地部署DeepSeek教程(Mac版本)-CSDN博客 使用 ChatBox AI 简化本地模型对话操作: 打开 ChatBox AI 官网:Chatbox AI官网:办公学习的AI好助手,全平台AI客户端…...
缩位求和——蓝桥杯
1.题目描述 在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。 比如:248153720248153720 把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是 1 位数,得 24814>145 156 56 而…...
hexo部署到github page时,hexo d后page里面绑定的个人域名消失的问题
Hexo 部署博客到 GitHub page 后,可以在 setting 中的 page 中绑定自己的域名,但是我发现更新博客后绑定的域名消失,恢复原始的 githubio 的域名。 后面搜索发现需要在 repo 里面添加 CNAME 文件,内容为 page 里面绑定的域名&…...
neo4j入门
文章目录 neo4j版本说明部署安装Mac部署docker部署 neo4j web工具使用数据结构图数据库VS关系数据库 neo4j neo4j官网Neo4j是用ava实现的开源NoSQL图数据库。Neo4作为图数据库中的代表产品,已经在众多的行业项目中进行了应用,如:网络管理&am…...
代码随想录——回溯
文章目录 组合组合总数电话号码的字母组合组合总数组合总数Ⅱ分割回文串复原IP地址子集子集Ⅱ非递减子序列去重的实现方法方法 1:**排序 跳过重复元素**方法 2:**使用哈希表或数组记录已使用的数字** 去重的完整示例总结本题代码 全排列全排列Ⅱ重新安排…...
独立游戏RPG回顾:高成本
刚看了某纪录片, 内容是rpg项目的回顾。也是这个以钱为核心话题的系列的最后一集。 对这期特别有代入感,因为主角是曾经的同事,曾经在某天晚上听过其项目组的争论。 对其这些年的起伏特别的能体会。 主角是制作人,在访谈中透露这…...
SQLModel入门
目录 概述快速开始官方教程简单使用样例 概述 SQLModel 是一个 ORM 框架,其基于 SQLAlchemy 和 Pydantic,其中 SQLALchemy 提供底层 ORM 能力,Pydantic 提供类型校验能力,SQLModel 中,一个 SQLModel model 既是一个 S…...
关于MySQL InnoDB存储引擎的一些认识
文章目录 一、存储引擎1.MySQL中执行一条SQL语句的过程是怎样的?1.1 MySQL的存储引擎有哪些?1.2 MyIsam和InnoDB有什么区别? 2.MySQL表的结构是什么?2.1 行结构是什么样呢?2.1.1 NULL列表?2.1.2 char和varc…...
【学习笔记】深度学习网络-正则化方法
作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…...
NVIDIA (英伟达)的 GPU 产品应用领域
游戏娱乐领域 PC 游戏:NVIDIA 的 GeForce 系列 GPU 是 PC 游戏玩家的首选之一。能实现实时光线追踪、高分辨率渲染等,使游戏画面更加逼真,如《赛博朋克 2077》等支持光线追踪的游戏,在 NVIDIA GPU 的加持下,可呈现出真…...
Docker快速部署高效照片管理系统LibrePhotos搭建私有云相册
文章目录 前言1.关于LibrePhotos2.本地部署LibrePhotos3.LibrePhotos简单使用4. 安装内网穿透5.配置LibrePhotos公网地址6. 配置固定公网地址 前言 想象一下这样的场景:你有一大堆珍贵的回忆照片,但又不想使用各种网盘来管理。怎么办?别担心…...
goframe 多语言国际化解决方案
项目背景 本项目采用基于JSON配置的多语言国际化(i18n)解决方案,支持多种语言的无缝切换和本地化。 目录结构 manifest/ └── i18n/├── zh.json # 简体中文├── zh-tw.json # 繁体中文├── en.json # 英语├…...
mysql如何修改密码
在MySQL中修改密码可以通过多种方式完成,具体取决于你的MySQL版本和你是否有足够的权限。以下是一些常用的方法来修改MySQL用户的密码: 方法1: 使用ALTER USER命令 这是最常用的方法,适用于MySQL 5.7及以上版本。 ALTER USER usernameloca…...
17.2 图形绘制8
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 17.2.10 重绘 先看以下例子: 【例 17.28】【项目:code17-028】绘制填充矩形。 private void button1_Clic…...
Java基础知识总结(三十八)--读取数据
使用Reader体系,读取一个文本文件中的数据。返回 -1 ,标志读到结尾。 import java.io.*; class { public static void main(String[] args) throws IOException { /* 创建可以读取文本文件的流对象,让创建好的流对象和指定的文件相关联。…...
【并查集】
并查集(Disjoint Set Union,DSU)是一种用于处理不相交集合的数据结构,主要支持两种操作:查找(Find)和合并(Union)。它在解决连通性问题、图论问题以及动态连通性等问题时…...
SQL NOW() 函数详解
SQL NOW() 函数详解 引言 在SQL数据库中,NOW() 函数是一个常用的日期和时间函数,用于获取当前的时间戳。本文将详细介绍 NOW() 函数的用法、参数、返回值以及在实际应用中的注意事项。 函数概述 NOW() 函数返回当前的日期和时间,格式为 Y…...
[EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率
Paper Card 论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…...
Rust 条件语句
Rust 条件语句 在编程语言中,条件语句是进行决策和实现分支逻辑的关键。Rust 语言作为一门系统编程语言,其条件语句的使用同样至关重要。本文将详细介绍 Rust 中的条件语句,包括其基本用法、常见场景以及如何避免常见错误。 基本用法 Rust…...
Windows 上安装 PostgreSQL
Windows 上安装 PostgreSQL PostgreSQL 是一款功能强大的开源对象-关系型数据库系统,它具有出色的扩展性和稳定性。本文将详细介绍在 Windows 操作系统上安装 PostgreSQL 的步骤和注意事项。 1. 准备工作 在开始安装 PostgreSQL 之前,请确保您的计算机满足以下要求: 操作…...
UE 5.3 C++ 对垃圾回收的初步认识
一.UObject的创建 UObject 不支持构造参数。 所有的C UObject都会在引擎启动的时候初始化,然后引擎会调用其默认构造器。如果没有默认的构造器,那么 UObject 将不会编译。 有修改父类参数的需求,就使用指定带参构造 // Sets default value…...
解码,蓝桥杯2020G
a2b 解码后:aab #include<iostream> using namespace std; typedef struct Node {char data;int size;Node* next; }Node,*Linklist; char* scan(char str[],int size) {int i 0;Linklist head new Node;Linklist rear head;while (i<size-1) {Lin…...
【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(一)
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:贪心算法篇–CSDN博客 文章目录 一.贪心算法1.什么是贪心算法2.贪心算法的特点 二.例题1.柠…...
Python3 + Qt5:实现AJAX异步更新UI
使用 Python 和 Qt5 开发时异步加载数据的方法 在开发使用 Python 和 Qt5 的应用程序时,为了避免在加载数据时界面卡顿,可以采用异步加载的方式。以下是几种实现异步加载的方法: 1. 使用多线程(QThread) 通过将数据…...
Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher Windows系统中Docker可视化工具对比分析1. 工具概览2. Docker Desktop官网链接:主要优点:主要缺点:版本更新频率: 3. Portainer官网…...
从ai产品推荐到利用cursor快速掌握一个开源项目再到langchain手搓一个Text2Sql agent
目录 0. 经验分享:产品推荐 1. 经验分享:提示词优化 2. 经验分享:使用cursor 阅读一篇文章 3. 经验分享:使用cursor 阅读一个完全陌生的开源项目 4. 经验分享:手搓一个text2sql agent (使用langchain l…...
curope python安装
目录 curope安装 测试: 报错:libc10.so: cannot open shared object file: No such file or directory 解决方法: curope安装 git clone : GitHub - Junyi42/croco at bd6f4e07d5c4f13ae5388efc052dadf142aff754 cd models/curope/ python setup.py build_ext --inplac…...
低代码产品插件功能一览
下图是统计的目前市面上流行的低代码、零代码产品的插件功能。 产品名称 产品类型 官方插件数量 支持拓展 官方插件功能 宜搭 零代码 3 暂不支持 云打印、CAD看图、打印表单详情 微搭 低代码 1 暂不支持 小程序 明道云 低代码 2 支持 视图、工作流节点 简道…...
流浪 Linux: 外置 USB SSD 安装 ArchLinux
注: ArchLinux 系统为滚动更新, 变化很快, 所以本文中的安装方法可能很快就过时了, 仅供参考. 实际安装时建议去阅读官方文档. 最近, 突然 (也没有那么突然) 有了一大堆 PC: 4 个笔记本, 2 个台式主机 (M-ATX 主板), 1 个小主机 (迷你主机). 嗯, 多到用不过来. 但是, 窝又不能…...
开启 AI 学习之旅:从入门到精通
最近 AI 真的超火,不管是工作还是生活里,到处都能看到它的身影。好多小伙伴都跑来问我,到底该怎么学 AI 呢?今天我就把自己学习 AI 的经验和心得分享出来,希望能帮到想踏入 AI 领域的朋友们! 一、学习内容有哪些 (一)编程语言 Python 绝对是首选!它在 AI 领域的生态…...
笔记:使用ST-LINK烧录STM32程序怎么样最方便?
一般板子在插件上, 8脚 3.3V;9脚 CLK;10脚 DIO;4脚GND ST_Link 19脚 3.3V;9脚 CLK;7脚 DIO;20脚 GND 烧录软件:ST-LINK Utility,Keil_5; ST_Link 接口针脚定义: 按定义连接ST_Link与电路板; 打开STM32 ST-LINK Uti…...
开发环境搭建-4:WSL 配置 docker 运行环境
在 WSL 环境中构建:WSL2 (2.3.26.0) Oracle Linux 8.7 官方镜像 基本概念说明 容器技术 利用 Linux 系统的 文件系统(UnionFS)、命名空间(namespace)、权限管理(cgroup),虚拟出一…...
925.长按键入
目录 一、题目二、思路三、解法四、收获 一、题目 你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字&am…...
【数据采集】案例01:基于Scrapy采集豆瓣电影Top250的详细数据
基于Scrapy采集豆瓣电影Top250的详细数据 Scrapy 官方文档:https://docs.scrapy.org/en/latest/豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:基于Scrapy框架采集豆瓣电影Top250的详细数据。 电脑系统:Windows 使用软件:PyCharm、Navicat Python…...
doris:主键模型的导入更新
这篇文档主要介绍 Doris 主键模型基于导入的更新。 整行更新 使用 Doris 支持的 Stream Load、Broker Load、Routine Load、Insert Into 等导入方式,向主键模型(Unique 模型)导入数据时,如果没有相应主键的数据行,…...
日志2025.2.1
日志2025.2.1 1.做了敌人状态机 public class EnermyStateMachine { public EnermyState currentState { get; private set; } public void InitializeState(EnermyState startState) { currentState startState; currentState.Enter(); } public void Change…...
RK3568使用QT操作LED灯
文章目录 一、QT中操作硬件设备思路Linux 中的设备文件操作硬件设备的思路1. 打开设备文件2. 写入数据到设备3. 从设备读取数据4. 设备控制5. 异常处理在 Qt 中操作设备的典型步骤实际应用中的例子:控制 LED总结二、QT实战操作LED灯设备1. `mainwindow.h` 头文件2. `mainwindo…...
Rank-analysis-1.2——一款基于LCU API的排位分析工具,大四学生独立开发
LOL Rank Record Analysis:一款基于LCU API的排位分析工具,大四学生独立开发! 大家好!我是河南科技学院的大四学生,今天给大家分享一个我自己开发的软件——LOL Rank Record Analysis。这是一个基于 Riot 提供的 LCU …...
关于系统重构实践的一些思考与总结
文章目录 一、前言二、系统重构的范式1.明确目标和背景2.兼容屏蔽对上层的影响3.设计灰度迁移方案3.1 灰度策略3.2 灰度过程设计3.2.1 case1 业务逻辑变更3.2.2 case2 底层数据变更(数据平滑迁移)3.2.3 case3 在途新旧流程兼容3.2.4 case4 接口变更3.2.5…...
代码随想录-训练营-day17
235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class S…...
C++,STL,【目录篇】
文章目录 一、简介二、内容提纲第一部分:STL 概述第二部分:STL 容器第三部分:STL 迭代器第四部分:STL 算法第五部分:STL 函数对象第六部分:STL 高级主题第七部分:STL 实战应用 三、写作风格四、…...
《数据可视化新高度:Graphy的AI协作变革》
在数据洪流奔涌的时代,企业面临的挑战不再仅仅是数据的收集,更在于如何高效地将数据转化为洞察,助力决策。Graphy作为一款前沿的数据可视化工具,凭借AI赋能的团队协作功能,为企业打开了数据协作新局面,重新…...
abc 390 D(暴搜 复杂度用 bell数 证明 n 的集合的划分方法的数目)
D题意: 将 长度为 N 的数组 划分为集合 有多少种不同的 异或和 这道题做出来和bell 数没什么关系,如果要证明复杂度那么就需要bell 数 #include <bits/stdc.h> using namespace std; typedef pair<int, int> PII; #define int long long i…...
AJAX综合案例——图书管理
黑马程序员视频地址: AJAX-Day02-10.案例_图书管理AJAX-Day02-10.案例_图书管理_总结_V1.0是黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖的第25集视频,…...
计算机网络 笔记 网络层 3
IPv6 IPv6 是互联网协议第 6 版(Internet Protocol Version 6)的缩写,它是下一代互联网协议,旨在解决 IPv4 面临的一些问题,以下是关于 IPv6 的详细介绍: 产生背景: 随着互联网的迅速发展&…...
Web服务器启动难题:Spring Boot框架下的异常处理解析
摘要 在尝试启动Web服务器时遇到了无法启动的问题,具体错误为org.springframework.boot.web.server.WebServerException。这一异常表明Spring Boot框架在初始化Web服务器过程中出现了故障。通常此类问题源于配置文件错误、端口冲突或依赖项缺失等。排查时应首先检查…...
在LINUX上安装英伟达CUDA Toolkit
下载安装包 wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda-repo-rhel8-12-8-local-12.8.0_570.86.10-1.x86_64.rpm 安装RPM包 sudo rpm -i cuda-repo-rhel8-12-8-local-12.8.0_570.86.10-1.x86_64.rpm sudo dnf clean all sudo dnf…...