《Python星球日记》 第51天:神经网络基础
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
目录
- 一、引言:走进神经网络的世界
- 二、神经元与激活函数
- 1. 神经元:计算的基本单元
- 2. 激活函数的种类与特点
- a) Sigmoid 函数
- b) ReLU 函数
- c) Tanh 函数
- 三、多层感知机(MLP)结构
- 1. 从单个神经元到神经网络
- 2. MLP 的基本组成部分
- 3. 多层感知机的特点与优势
- 四、前向传播与损失计算
- 1. 前向传播:信息的正向流动
- 2. 损失函数:评估预测质量
- 五、激活函数的选择与影响
- 1. 不同层的激活函数选择策略
- 2. 激活函数对模型性能的影响
- 六、代码练习:使用框架构建简单神经网络
- 1. 使用 PyTorch 构建神经网络
- 2. 使用 TensorFlow/Keras 构建神经网络
- 七、总结与展望
- 1. 关键知识点回顾
- 2. 深度学习的下一步
👋 专栏介绍: Python星球日记专栏介绍(持续更新ing)
✅ 上一篇: 《Python星球日记》 第50天:深度学习概述与环境搭建
今天是我们Python星球探索之旅的第51天!🪐
一、引言:走进神经网络的世界
经过前面的机器学习基础学习,我们今天将揭开深度学习的神秘面纱,探索神经网络的基本原理。
神经网络是什么?简单来说,它是一种模仿人类大脑结构和工作方式的算法模型,能够从大量数据中学习复杂的模式。无论是语音识别、图像分类还是自然语言处理,神经网络都展现出了强大的能力。让我们一起踏上这段奇妙的旅程吧!
二、神经元与激活函数
1. 神经元:计算的基本单元
神经元(Neuron)是神经网络的基本构建块,其灵感来源于生物神经元的工作方式。在数学上,一个神经元接收多个输入,对这些输入进行加权求和,然后通过一个激活函数转换为输出。
神经元模型是一个接收多个输入值,并产生单一输出的基本计算单元。它包含三个关键组成部分:
- 输入与权重:每个输入值
x_i
都与一个对应的权重w_i
相乘 - 求和函数:将所有加权输入求和,并加上一个偏置项
b
- 激活函数:将线性求和的结果转化为非线性输出
神经元的数学表达式为:
y = f(w₁x₁ + w₂x₂ + ... + wₙxₙ + b)
其中 f
就是激活函数,它决定了神经元的输出特性。
2. 激活函数的种类与特点
激活函数 是 神经网络中引入非线性的关键组件,它能让网络学习复杂的模式。让我们来了解几种常用的激活函数:
a) Sigmoid 函数
Sigmoid 函数是最早使用的激活函数之一,其数学表达式为:
σ(x) = 1 / (1 + e^(-x))
它将任何输入映射到 0 到 1 之间的值,形成一条 S 形曲线。
- 优点:输出范围有限,可以用于表示概率,平滑可导
- 缺点:在输入值较大或较小时,梯度接近于零,导致梯度消失问题;输出不是零中心的
b) ReLU 函数
ReLU(Rectified Linear Unit,修正线性单元)是目前最受欢迎的激活函数之一,其数学表达式简单:
ReLU(x) = max(0, x)
它将所有负值置为零,而正值保持不变。
- 优点:计算效率高,有效缓解梯度消失问题,促进稀疏激活
- 缺点:可能导致"神经元死亡"(当输入总是为负时),输出不是零中心的
c) Tanh 函数
Tanh(双曲正切)函数在形状上类似于 Sigmoid,但其输出范围是 -1 到 1:
tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))
- 优点:输出是零中心的,有助于后续层的学习
- 缺点:仍然存在梯度消失问题,但比 Sigmoid 要轻微
三、多层感知机(MLP)结构
1. 从单个神经元到神经网络
单个神经元的能力有限,但当我们将多个神经元按层组织起来,就形成了多层感知机(Multilayer Perceptron,MLP)。MLP 是最基础的前馈神经网络,信息只从输入层向输出层单向传播。
2. MLP 的基本组成部分
多层感知机通常由以下三种层构成:
- 输入层:接收原始数据的神经元,每个输入特征对应一个神经元
- 隐藏层:位于输入层和输出层之间的中间层,可以有一层或多层
- 输出层:产生最终预测结果的神经元层
每一层的神经元都与下一层的所有神经元全连接,这种结构也称为全连接层或密集层。一个典型的 MLP 网络可以表示为:
输入层 → 隐藏层1 → 隐藏层2 → ... → 隐藏层n → 输出层
3. 多层感知机的特点与优势
多层感知机相比单层感知机有以下显著优势:
- 非线性映射能力:通过激活函数引入非线性,能够学习复杂的非线性决策边界
- 表达能力增强:隐藏层越多,网络的表达能力越强,可以拟合更复杂的函数
- 分层特征学习:浅层网络学习简单特征,深层网络学习复杂特征,形成层次化的特征表示
四、前向传播与损失计算
1. 前向传播:信息的正向流动
前向传播(Forward Propagation)是神经网络中信息从输入层流向输出层的过程。
在这个过程中,每一层的神经元接收前一层的输出,进行计算,然后将结果传递给下一层。让我们用一个简单的双隐层神经网络来解释这个过程:
1》输入层接收数据:假设我们有特征向量 X = [x₁, x₂, …, xₙ]
2》计算第一隐藏层:
- 线性变换:Z₁ = W₁X + b₁,其中 W₁ 是权重矩阵,b₁ 是偏置向量
- 应用激活函数:A₁ = f₁(Z₁),如 ReLU(Z₁)
3》计算第二隐藏层:
- 线性变换:Z₂ = W₂A₁ + b₂
- 应用激活函数:A₂ = f₂(Z₂)
4》计算输出层:
- 线性变换:Z₃ = W₃A₂ + b₃
- 应用输出激活函数:Ŷ = f_out(Z₃)
- 对于回归问题,可能不使用激活函数
- 对于二分类问题,通常使用 Sigmoid 函数
- 对于多分类问题,通常使用 Softmax 函数
前向传播是一个从输入到输出的计算过程,每一步都依赖于前一步的结果和当前层的参数(权重和偏置)。
2. 损失函数:评估预测质量
损失函数(Loss Function)用于衡量神经网络预测值与真实值之间的差距。不同类型的问题需要不同的损失函数:
-
均方误差(Mean Squared Error, MSE):常用于回归问题
MSE = (1/n) * Σ(y_i - ŷ_i)²
-
交叉熵损失(Cross-Entropy Loss):常用于分类问题
对于二分类:CE = -[y * log(ŷ) + (1-y) * log(1-ŷ)] 对于多分类:CE = -Σ(y_i * log(ŷ_i))
损失函数越小,表示模型的预测越接近真实值,这是神经网络训练的目标。
五、激活函数的选择与影响
1. 不同层的激活函数选择策略
在神经网络设计中,激活函数的选择对模型性能有显著影响。这里有一些常用的选择策略:
1》隐藏层激活函数:
- ReLU 是目前隐藏层最常用的激活函数,因为它计算简单且有效缓解梯度消失问题
- Leaky ReLU 和 ELU 是 ReLU 的变种,解决了 “神经元死亡” 问题
- Tanh 在某些情况下仍然有用,特别是在循环神经网络中
2》输出层激活函数:
- 线性函数(即不使用激活函数):适用于回归问题
- Sigmoid:适用于二分类问题(输出0-1之间的概率值)
- Softmax:适用于多分类问题(输出多个类别的概率分布)
2. 激活函数对模型性能的影响
激活函数的选择会影响以下几个方面:
- 训练速度:ReLU系列通常比 Sigmoid 和 Tanh 训练更快
- 梯度流动:好的激活函数应当避免梯度消失或爆炸
- 模型表达能力:非线性激活函数让网络能学习复杂模式
- 稀疏激活:如 ReLU 让部分神经元不激活,增加模型稀疏性
一般的经验法则是:从 ReLU 作为隐藏层的激活函数开始,如果遇到问题再尝试其他选择。
六、代码练习:使用框架构建简单神经网络
现在让我们动手实践,分别使用 PyTorch 和 TensorFlow 构建一个简单的神经网络,来解决手写数字识别的经典问题(MNIST数据集)。
1. 使用 PyTorch 构建神经网络
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader# 设定随机种子,确保结果可重复
torch.manual_seed(42)# 1. 数据准备
transform = transforms.Compose([transforms.ToTensor(), # 将图像转换为张量transforms.Normalize((0.1307,), (0.3081,)) # 标准化(MNIST数据集的均值和标准差)
])# 加载MNIST训练集和测试集
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)# 创建数据加载器
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=1000, shuffle=False)# 2. 定义神经网络模型
class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()# 输入层 -> 隐藏层1self.fc1 = nn.Linear(28*28, 128) # MNIST图像是28x28像素# 隐藏层1 -> 隐藏层2self.fc2 = nn.Linear(128, 64)# 隐藏层2 -> 输出层self.fc3 = nn.Linear(64, 10) # 10个类别(数字0-9)# 定义激活函数self.relu = nn.ReLU()def forward(self, x):# 将28x28的图像展平为向量x = x.view(-1, 28*28)# 前向传播过程x = self.fc1(x) # 线性变换x = self.relu(x) # 应用ReLU激活函数x = self.fc2(x) # 线性变换x = self.relu(x) # 应用ReLU激活函数x = self.fc3(x) # 线性变换到输出层return x # 返回logits,不应用softmax(CrossEntropyLoss会内部处理)# 3. 实例化模型、定义损失函数和优化器
model = MLP()
criterion = nn.CrossEntropyLoss() # 交叉熵损失函数(内部包含softmax)
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) # 随机梯度下降优化器# 4. 训练模型
num_epochs = 5
print("开始训练...")for epoch in range(num_epochs):running_loss = 0.0for i, (inputs, labels) in enumerate(train_loader):# 清空梯度optimizer.zero_grad()# 前向传播outputs = model(inputs)# 计算损失loss = criterion(outputs, labels)# 反向传播loss.backward()# 更新参数optimizer.step()# 统计损失running_loss += loss.item()# 每100批次打印一次训练信息if (i+1) % 100 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {running_loss/100:.4f}')running_loss = 0.0# 5. 测试模型
model.eval() # 设置为评估模式
correct = 0
total = 0with torch.no_grad(): # 不计算梯度for inputs, labels in test_loader:outputs = model(inputs)_, predicted = torch.max(outputs.data, 1) # 获取最大概率的索引total += labels.size(0)correct += (predicted == labels).sum().item()print(f'测试准确率: {100 * correct / total:.2f}%')
2. 使用 TensorFlow/Keras 构建神经网络
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, models
import numpy as np# 设置随机种子,确保结果可重复
tf.random.set_seed(42)
np.random.seed(42)# 1. 加载和预处理MNIST数据集
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()# 标准化像素值到[0, 1]范围
x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255# 将图像展平为一维向量
x_train = x_train.reshape(-1, 28*28)
x_test = x_test.reshape(-1, 28*28)# One-hot编码标签
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)# 2. 定义神经网络模型
model = models.Sequential([# 输入层 -> 隐藏层1layers.Dense(128, activation='relu', input_shape=(28*28,)),# 隐藏层1 -> 隐藏层2layers.Dense(64, activation='relu'),# 隐藏层2 -> 输出层layers.Dense(10, activation='softmax') # 输出层使用softmax激活函数
])# 3. 编译模型
model.compile(optimizer=keras.optimizers.SGD(learning_rate=0.01, momentum=0.9), # 随机梯度下降优化器loss='categorical_crossentropy', # 分类交叉熵损失函数metrics=['accuracy'] # 评估指标
)# 4. 查看模型结构
model.summary()# 5. 训练模型
print("开始训练...")
history = model.fit(x_train, y_train,epochs=5,batch_size=64,validation_split=0.1, # 使用10%的训练数据作为验证集verbose=1
)# 6. 评估模型性能
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"测试准确率: {test_acc*100:.2f}%")# 7. 进行预测示例
predictions = model.predict(x_test[:5])
print("预测结果示例:")
for i in range(5):predicted_label = np.argmax(predictions[i])true_label = np.argmax(y_test[i])print(f"样本 {i+1}: 预测为 {predicted_label}, 实际为 {true_label}")
七、总结与展望
今天,我们学习了神经网络的基础知识,包括神经元结构、激活函数、多层感知机以及前向传播的原理。通过实践,我们使用 PyTorch 和 TensorFlow 实现了简单的神经网络模型。这些概念是深度学习的基石,将帮助我们理解更复杂的神经网络架构。
1. 关键知识点回顾
- 神经元是神经网络的基本单元,由输入、权重、偏置和激活函数组成
- 激活函数(Sigmoid、ReLU、Tanh)为网络引入非线性,使其能学习复杂模式
- 多层感知机(MLP)是一种基本的前馈神经网络,由输入层、隐藏层和输出层组成
- 前向传播是信息从输入层到输出层的流动过程,用于生成预测
- 损失函数用于衡量预测值与真实值之间的差距,是模型优化的目标
2. 深度学习的下一步
神经网络基础只是深度学习的开始。在接下来的学习中,我们将探索:
- 反向传播算法:如何通过梯度下降更新网络权重
- 卷积神经网络(CNN):特别适用于图像处理的神经网络
- 循环神经网络(RNN):处理序列数据的网络架构
- 注意力机制:提高模型对关键信息的关注
- 预训练模型:如何利用迁移学习加速模型训练
深度学习是一个不断发展的领域,持续学习和实践是掌握这些技术的关键。明天,我们将继续我们的Python星球之旅,探索更多深度学习的奥秘!
祝你学习愉快,Python星球的探索者!👨🚀🌠
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果你对今天的内容有任何问题,或者想分享你的学习心得,欢迎在评论区留言讨论!
相关文章:
《Python星球日记》 第51天:神经网络基础
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、引言:走进神经网络的世界二、神经元与激活函数1. 神经元&#x…...
MindSpore框架学习项目-ResNet药物分类-模型评估
目录 4.模型评估 4.1模型预测 4.1.1加载模型 4.1.2通过传入图片路径进行推理 单张图片推理代码解释 4.2图片推理 4.2.1构造可视化推理结果函数 可视化推理结果函数代码解释 4.2.2进行单张推理 参考内容: 昇思MindSpore | 全场景AI框架 | 昇思MindSpore社区…...
Visual Studio Code 前端项目开发规范合集【推荐插件】
文章目录 前言代码格式化工具(Prettier)1、下载 prettier 相关依赖:2、安装 Vscode 插件(Prettier):3、配置 Prettier(.prettierrc.cjs): 代码规范工具(ESLin…...
uniapp-商城-48-后台 分类数据添加修改弹窗bug
在第47章的操作中,涉及到分类的添加、删除和更新功能,但发现uni-popup组件存在bug。该组件的函数接口错误导致在小程序中出现以下问题:1. 点击修改肉类名称时,回调显示为空,并报错“setVal is not defined”࿰…...
OpenLayers 精确经过三个点的曲线绘制
OpenLayers 精确经过三个点的曲线绘制 根据您的需求,我将提供一个使用 OpenLayers 绘制精确经过三个指定点的曲线解决方案。对于三个点的情况,我们可以使用 二次贝塞尔曲线 或 三次样条插值,确保曲线精确通过所有控制点。 实现方案 下面是…...
uniapp小程序中实现无缝衔接滚动效果
组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动动画,可以根据自己的需要进行艺术化的更改需要滚动的内容,也可以自定义更改滚动速度。 <template><view cla…...
【Docker 新手入门指南】第四章:镜像加速
【Docker 新手入门指南】系列文章目录 【Docker 新手入门指南】第一章:前言【Docker 新手入门指南】第二章:架构概述【Docker 新手入门指南】第三章:快速安装【Docker 新手入门指南】第四章:镜像加速 文章目录 🚀【Doc…...
k8s删除pv和pvc后,vg存储没释放分析
原因是pv对应的lvm没删除 pv如下: local-068e2cac-22de-40f3-af90-efd151d043c8 100Gi RWO Retain Released sase-ops/alertmanager-kube-prometheus-stack-alertmanager-db-alertmanager-kube-prometheus-stack-alertmanager-0 …...
Ubuntu 22.04(WSL2)使用 Docker 安装 Zipkin 和 Skywalking
Ubuntu 22.04(WSL2)使用 Docker 安装 Zipkin 和 Skywalking 分布式追踪工具在现代微服务架构中至关重要,它们帮助开发者监控请求在多个服务之间的流动,识别性能瓶颈和潜在错误。本文将指导您在 Ubuntu 22.04(WSL2 环境…...
【DLF】基于语言的多模态情感分析
作者提出的不足 模态平等处理导致冗余与冲突 问题:现有MSA方法对所有模态(语言、视觉、音频)平等处理,忽略模态间贡献差异(如语言为主导模态)。后果:跨模态交互引入冗余信息(如视觉和音频中与情感无关的噪声),甚至模态对间双向信息传递(…...
window 显示驱动开发-线性伸缩空间段
线性伸缩空间段类似于线性内存空间段。 但是,伸缩空间段只是地址空间,不能容纳位。 若要保存位,必须分配系统内存页,并且必须重定向地址空间范围以引用这些页面。 内核模式显示微型端口驱动程序(KMD)必须实…...
[Linux网络_71] NAT技术 | 正反代理 | 网络协议总结 | 五种IO模型
目录 1.NAT技术 NAPT 2.NAT和代理服务器 3.网线通信各层协议总结 补充说明 4.五种 IO 模型 1.什么是IO?什么是高效的IO? 2.有那些IO的方式?这么多的方式,有那些是高效的? 异步 IO 🎣 关键缺陷类比…...
免费5个 AI 文字转语音工具网站!
一个爱代码的设计师在运营,不定时分享干货、学习方法、效率工具和AIGC趋势发展。个人网站:tomda.top 分享几个好用的文字转语音、语音转文字的在线工具,麻烦需要的朋友保存。 01. ChatTTS 中英文智能转换,语音自然流畅,在线免费…...
【入门】数字走向II
描述 输入整数N,输出相应方阵。 输入描述 一个整数N。( 0 < n < 10 ) 输出描述 一个方阵,每个数字的场宽为3。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int in;i>1;i--){for(…...
Linux基础(文件权限和用户管理)
1.文件管理 1.1 文件权限 文件的权限总共有三种:r(可读),w(可写),x(可执行),其中r是read,w是write,x是execute的缩写。 我们…...
【BYD_DM-i技术解析】
关键词:构型、能量流、DM-i 一、发展历史:从DM1到DM5的技术跃迁 比亚迪DM(Dual Mode)技术始于2008年,其发展历程可划分为五代,核心目标始终围绕“油电协同”与“高效节能”展开: DM1…...
React Hooks 精要:从入门到精通的进阶之路
Hooks 是 React 16.8 引入的革命性特性,它让函数组件拥有了类组件的能力。以下是 React Hooks 的详细使用指南。 一、基础 Hooks 1. useState - 状态管理 import { useState } from react;function Counter() {const [count, setCount] = useState(0); // 初始值为0return …...
为什么选择 FastAPI、React 和 MongoDB?
在技术日新月异的今天,全栈开发需要兼顾效率、性能和可扩展性。FastAPI、React 和 MongoDB 这三者的组合,恰好构成了一个覆盖前后端与数据库的技术黄金三角。它们各自解决了开发中的核心痛点,同时以轻量化的设计和强大的生态系统,成为现代 Web 开发的首选方案。以下将从架构…...
01背包类问题
文章目录 [模版]01背包1. 第一问: 背包不一定能装满(1) 状态表示(2) 状态转移方程(3) 初始化(4) 填表顺序(5) 返回值 2. 第二问: 背包恰好装满3. 空间优化 416.分割等和子集1. 状态表示2. 状态转移方程3. 初始化4. 填表顺序5. 返回值 [494. 目标和](https://leetcode.cn/proble…...
重复的子字符串
28. 找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1&#…...
Spark MLlib网页长青
一、实验目的 1.掌握Spark SQL中用户自定义函数的编写。 2. 掌握特征工程的OneHotEncoder、VectorAssembler。 3. 熟悉决策树算法原理,能够使用Spark MLlib库编写程序 4. 掌握二分类问题评估方法 5. 能够使用TrainValidation和crossValidation交叉验证找出最佳模型。 6…...
详解多协议通信控制器
详解多协议通信控制器 在上文中,我们使用Verilog代码实现了完整的多协议通信控制器,只是讲解了具体原理与各个模块的实现代码,但是为什么这么写?这么写有什么用?模块与模块之间又是怎么连接相互作用的?今天我们就来处理这些问题。 为什么不能直接用 FPGA 内部时钟给外设?…...
JavaWeb基础
七、JavaWeb基础 javaWeb:完整技术体系,掌握之后能够实现基于B/S架构的系统 1. C/S和B/S 1.1 C/S(Client/server) C/S:客户端与服务器 本质:本地上有代码(程序在本机上)优点&#…...
localStorage和sessionStorage
localStorage和sessionStorage localStorage是指在用户浏览器中存储数据的方式,允许Web应用程序将少量的数据保存在用户设备上,便于页面之间、关闭浏览器后的数据持久化,他不会随着HTTP请求发送道服务器,减少带宽消耗,…...
c++类【高潮】
类继承 和直接复制源代码修改相比,继承的好处是减少测试。 基类:原始类, 派生类:继承类,基于基类丰富更多内容的类。 继承一般用公有继承,class 派生类名 : public 基类名{……}; 公有继承&…...
C++进阶--AVL树的实现续
文章目录 C进阶--AVL树的实现双旋AVL树的查找AVL树的检验结语 很高兴和搭大家见面,给生活加点impetus,开启今天的比编程之路!! 今天我们来完善AVL树的操作,为后续红黑树奠定基础!! 作者&#x…...
1 2 3 4 5顺序插入,形成一个红黑树
红黑树的特性与优点 红黑树是一种自平衡的二叉搜索树,通过额外的颜色标记和平衡性约束,确保树的高度始终保持在 O(log n)。其核心特性如下: 每个节点要么是红色,要么是黑色。根节点和叶子节点(NIL节点)是…...
Telnetlib三种异常处理方案
1. socket.timeout 异常 触发场景 网络延迟高或设备响应缓慢,导致连接或读取超时。 示例代码 import telnetlib import socketdef telnet_connect_with_timeout(host, port23, timeout2):try:# 设置超时时间(故意设置较短时间模拟超时)tn…...
Linux:进程间通信---消息队列信号量
文章目录 1.消息队列1.1 消息队列的原理1.2 消息队列的系统接口 2. 信号量2.1 信号量的系统调用接口 3. 浅谈进程间通信3.1 IPC在内核中数据结构设计3.2 共享内存的缺点3.3 理解信号量 序:在上一章中,我们引出了命名管道和共享内存的概念,了解…...
暗物质卯引力挂载技术
1、物体质量以及其所受到的引力约束(暗物质压力差) 自然界的所有物体,其本身都是没有质量的。我们所理解的质量,其实是物体球周空间的暗物质对物体的挤压,压力差。 对于宇宙空间中的单个星球而言,它的球周各处压力是相同的,所以,它处于平衡状态,漂浮在宇宙中。 对于星…...
JMeter 中实现 双 WebSocket(双WS)连接
在 JMeter 中实现 双 WebSocket(双WS)连接 的测试场景(例如同时连接两个不同的 WebSocket 服务或同一服务的两个独立会话),可以通过以下步骤配置: 1. 场景需求 两个独立的 WebSocket 连接(例如 …...
卡尔曼滤波算法简介与 Kotlin 实现
一、引言 卡尔曼滤波(Kalman Filter)是一种基于线性系统状态空间模型的最优递归估计算法,由鲁道夫・E・卡尔曼于 1960 年提出。其核心思想是通过融合系统动态模型预测值与传感器观测值,在最小均方误差准则下实现对系统状态的实时…...
【比赛真题解析】混合可乐
这次给大家分享一道比赛题:混合可乐。 洛谷链接:U561549 混合可乐 【题目描述】 Jimmy 最近沉迷于可乐中无法自拔。 为了调配出他心目中最完美的可乐,Jimmy买来了三瓶不同品牌的可乐,然后立马喝掉了一些(他实在是忍不住了),所以 第一瓶可口可乐最大容量为 a 升,剩余 …...
[论文阅读]BadPrompt: Backdoor Attacks on Continuous Prompts
BadPrompt: Backdoor Attacks on Continuous Prompts BadPrompt | Proceedings of the 36th International Conference on Neural Information Processing Systems 36th Conference on Neural Information Processing Systems (NeurIPS 2022) 如图1a,关注的是连续…...
DeepSeek 实现趣味心理测试应用开发教程
一、趣味心理测试应用简介 趣味心理测试是一种通过简单的问题或互动,为用户提供心理特征分析的方式。它通常包含以下功能: 测试题目展示:以问答形式呈现心理测试题。用户行为分析:根据用户的回答或选择,分析心理特征…...
计算机网络八股文--day1
从浏览器输入url到显示主页的过程? 1. 浏览器查询域名的IP地址 2. 浏览器和服务器TCP三次握手 3. 浏览器向服务器发送一个HTTP请求 4. 服务器处理请求,返回HTTP响应 5. 浏览器解析并且渲染页面 6. 断开连接 其中使用到的协议有DNS协议(…...
【计算机视觉】OpenCV实战项目:FunnyMirrors:基于OpenCV的实时哈哈镜效果实现技术解析
FunnyMirrors:基于OpenCV的实时哈哈镜效果实现技术解析 1. 项目概述2. 技术原理2.1 图像变形基础2.2 常见的哈哈镜变形算法2.2.1 凸透镜效果2.2.2 凹透镜效果2.2.3 波浪效果 3. 项目实现细节3.1 核心代码结构3.2 主要功能实现3.2.1 图像采集3.2.2 变形映射生成3.2.3…...
量子机器学习:下一代AI的算力革命与算法范式迁移——从量子神经网络到混合量子-经典架构的产业落地
一、引言:当AI遇见量子力学 2025年,全球量子计算市场规模突破200亿美元,而量子机器学习(QML)正以370%的年复合增长率(数据来源:Gartner 2024)成为最受关注的技术融合领域。传统深度…...
【数据结构】——栈
一、栈的概念和结构 栈其实就是一种特殊的顺序表,其只允许在一端进出,就是栈的数据的插入和删除只能在一端进行,进行数据的插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的元素遵循先进后出LIFO(Last InFirst O…...
Octave 绘图快速入门指南
目录 1. 基本的 2D 绘图 2. 自定义图形样式 3. 绘制散点图 4. 绘制柱状图 5. 绘制直方图 6. 3D 绘图 6.6.1 3D 曲面图 6.6.2 3D 散点图 7. 绘制极坐标 8. 多子图绘制 总结 Octave 是一个类似于 MATLAB 的开源数学软件,广泛用于数值计算和数据分析。它提供…...
RabbitMQ深入学习
继续上一节的学习,上一节学习了RabbitMQ的基本内容,本节学习RabbitMQ的高级特性。 RocketMQ的高级特性学习见这篇博客 目录 1.消息可靠性1.1生产者消息确认1.2消息持久化1.3消费者消息确认1.4消费失败重试机制1.5消息可靠性保证总结 2.什么是死信交换机…...
数据结构中的栈与队列:原理、实现与应用
前言:栈和队列是计算机科学中两种最基础的线性数据结构,它们的独特操作规则和广泛的应用场景使其成为每一位开发者必须掌握的核心知识。本文将通过生活案例、代码实现和实际应用场景,带您深入理解这两种数据结构的精髓。 1.栈(Sta…...
Android 13 默认打开 使用屏幕键盘
原生设置里,系统-语言和输入法-实体键盘-使用屏幕键盘 选项, 关闭时,外接物理键盘,如USB键盘,输入时不会弹出软键盘。 打开时,外接物理键盘,如USB键盘,输入时会弹出软键盘。 这个选…...
C++GO语言微服务之图片、短信验证码生成及存储
目录 01 session的处理 02 获取网页图片验证码ID 03 测试图片验证码 04 图片验证码模块集成 05 图片验证码功能移植微服务 06 图片验证码功能对接微服务的web实现 07 对接微服务的web实现步骤小结 08 Redis数据库基本操作回顾 09 go语言操作Redis数据库API介绍 10 go语…...
视觉革命来袭!ComfyUI-LTXVideo 让视频创作更高效
探索LTX-Video 支持的ComfyUI 在数字化视频创作领域,视频制作效果的提升对创作者来说无疑是一项重要的突破。LTX-Video支持的ComfyUI便是这样一款提供自定义节点的工具集,它专为改善视频质量、提升生成速度而开发。接下来,我们将详细介绍其功…...
MySQL 索引(一)
文章目录 索引(重点)硬件理解磁盘盘片和扇区定位扇区磁盘的随机访问和连续访问 软件方面的理解建立共识索引的理解 索引(重点) 索引可以提高数据库的性能,它的价值,在于提高一个海量数据的检索速度。 案例…...
认识 Linux 内存构成:Linux 内存调优之内存分配机制和换页行为认知
写在前面 博文内容涉及 Linux 中内存分配和换页机制的基本认知理解不足小伙伴帮忙指正 😃,生活加油99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻,而不是选择逃避。不要站在原地想象困难,行…...
uniapp-商城-50-后台 商家信息
本文介绍了如何在后台管理系统中添加和展示商家信息,包括商家logo、名称、电话、地址和介绍等内容,并支持后期上传营业许可等文件。通过使用uni-app的uni-forms组件,可以方便地实现表单的创建、校验和管理操作。文章详细说明了组件的引入、页…...
汇编语言的温度魔法:单总线温度采集与显示的奇幻之旅
在嵌入式系统的奇妙世界中,汇编语言与硬件的结合总是充满了无限可能。今天,我将带你走进一场充满乐趣的实验:如何用汇编语言在单片机上实现单总线温度采集与显示。这不仅是一次技术探索,更是一场点亮创意与灵感的奇幻之旅…...
2025盘古石初赛WP
来不及做,还有n道题待填坑 文章目录 手机取证 Mobile Forensics分析安卓手机检材,手机的IMSI是? [答案格式:660336842291717]养鱼诈骗投资1000,五天后收益是? [答案格式:123]分析苹果手机检材&a…...