当前位置: 首页 > news >正文

PyTorch 线性回归模型构建与神经网络基础要点解析

笔记

1 PyTorch构建线性回归模型

1.1 创建数据集

import torch
from torch.utils.data import TensorDataset  # 创建x和y张量数据集对象
from torch.utils.data import DataLoader  # 创建数据集加载器
import torch.nn as nn  # 损失函数和回归函数
from torch.optim import SGD  # 随机梯度下降函数, 取一个训练样本算梯度值
from sklearn.datasets import make_regression  # 创建随机样本, 工作中不使用
import matplotlib.pyplot as plt
​
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
​
​
# todo: 1-创建线性回归样本 x y coef(w) b
def create_datasets():x, y, coef = make_regression(n_samples=100,  # 样本数n_features=1,  # 特征数noise=10,  # 标准差, 噪声, 样本离散程度coef=True,  # 返回系数, wbias=14.5,  # 截距 brandom_state=0)
​# 将数组转换成张量x = torch.tensor(data=x)y = torch.tensor(data=y)# print('x->', x)# print('y->', y)# print('coef->', coef)return x, y, coef
​
if __name__ == '__main__':x, y, coef = create_datasets()

1.2 训练模型

# todo: 2-模型训练
def train(x, y, coef):# 创建张量数据集对象datasets = TensorDataset(x, y)print('datasets->', datasets)# 创建数据加载器对象# dataset: 张量数据集对象# batch_size: 每个batch的样本数# shuffle: 是否打乱样本dataloader = DataLoader(dataset=datasets, batch_size=16, shuffle=True)print('dataloader->', dataloader)# for batch in dataloader:  # 每次遍历取每个batch样本#   print('batch->', batch)  # [x张量对象, y张量对象]#   break# 创建初始回归模型对象, 随机生成w和b, 元素类型为float32# in_features: 输入特征数 1个# out_features: 输出特征数 1个model = nn.Linear(in_features=1, out_features=1)print('model->', model)# 获取模型对象的w和b参数print('model.weight->', model.weight)print('model.bias->', model.bias)print('model.parameters()->', list(model.parameters()))# 创建损失函数对象, 计算损失值criterion = nn.MSELoss()# 创建SGD优化器对象, 更新w和boptimizer = SGD(params=model.parameters(), lr=0.01)# 定义变量, 接收训练次数, 损失值, 训练样本数epochs = 100loss_list = []  # 存储每次训练的平均损失值total_loss = 0.0train_samples = 0for epoch in range(epochs):  # 训练100次# 借助循环实现 mini-batch SGD 模型训练for train_x, train_y in dataloader:# 模型预测# train_x->float64# w->float32y_pred = model(train_x.type(dtype=torch.float32))  # y=w*x+bprint('y_pred->', y_pred)# 计算损失值, 调用损失函数对象# print('train_y->', train_y)# y_pred: 二维张量# train_y: 一维张量, 修改成二维张量, n行1列# 可能发生报错, 修改形状# 修改train_y元素类型, 和y_pred类型一致, 否则发生报错loss = criterion(y_pred, train_y.reshape(shape=(-1, 1)).type(dtype=torch.float32))print('loss->', loss)# 获取loss标量张量的数值 item()# 统计n次batch的总MSE值total_loss += loss.item()# 统计batch次数train_samples += 1# 梯度清零optimizer.zero_grad()# 计算梯度值loss.backward()# 梯度更新 w和b更新# step()等同 w=w-lr*gradoptimizer.step()# 每次训练的平均损失值保存到loss列表中loss_list.append(total_loss / train_samples)print('每次训练的平均损失值->', total_loss / train_samples)print('loss_list->', loss_list)print('w->', model.weight)print('b->', model.bias)# 绘制每次训练损失值曲线变化图plt.plot(range(epochs), loss_list)plt.title('损失值曲线变化图')plt.grid()plt.show()
​# 绘制预测值和真实值对比图# 绘制样本点分布plt.scatter(x, y)# 获取1000个样本点# x = torch.linspace(start=x.min(), end=x.max(), steps=1000)# 计算训练模型的预测值y1 = torch.tensor(data=[v * model.weight + model.bias for v in x])# 计算真实值y2 = torch.tensor(data=[v * coef + 14.5 for v in x])plt.plot(x, y1, label='训练')plt.plot(x, y2, label='真实')plt.legend()plt.grid()plt.show()
​
​
if __name__ == '__main__':x, y, coef = create_datasets()train(x, y, coef)

2 人工神经网络介绍

2.1 什么是人工神经网络

  • 仿生生物学神经网络的计算模型

  • ANN(人工神经网络)->NN(神经网络)

2.2 如何构建人工神经网络

神经网络是由三个层, 每层由多个神经元构成

  • 输入层: 输入样本的特征值, 一层

  • 隐藏层: 提取复杂特征, 可以有多层

  • 输出层: 输出y值, y预测值

2.3 人工神经网络内部状态值和激活值

神经元如何工作

  • 内部状态值(加权求和值)

    • z=w1*x1+w2*x2+...+b

  • 激活值

    • a=f(z)

3 激活函数介绍

3.1 激活函数作用

  • 给神经网络模型中引入非线性因素

  • 生产环境中,问题存在线性不可分情况

3.2 常见激活函数

  • sigmoid激活函数

    • sigmoid激活值范围是[0, 1], 只有正信号, 没有负信号, 模型只能学习到正信号

    • 加权求和值在[-6,6]范围, 计算激活值时分布到[0, 1], 否则激活值只能是0或1

    • sigmoid激活函数导数值范围是[0,0.25], 加权求和值在[-6,6]范围, 激活值梯度才分布到[0, 0.25], 否则梯度为0

    • 神经网络中梯度连乘, sigmoid激活函数梯度值很小, 接近0, 梯度消失 0.25*0.25*0.25*...

    • sigmoid一般在二分类输出层使用, 如果神经网络隐藏层在5层之内也可以考虑使用sigmoid

    # sigmoid激活值: torch.sigmoid(x)
    ​
    import torch
    import matplotlib.pyplot as plt
    ​
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    ​
    ​
    def dm01():# 创建x值, 线性模型输出值作为激活函数的输入值x = torch.linspace(-20, 20, 1000)# 计算激活值y = torch.sigmoid(input=x)# 创建画布对象和坐标轴对象_, axes = plt.subplots(1, 2)  # 一行两列, 绘制两个子图axes[0].plot(x, y)axes[0].grid()axes[0].set_title('sigmoid激活函数')
    ​# 创建x值,可以自动微分, 线性模型输出值作为激活函数的输入值x = torch.linspace(-20, 20, 1000, requires_grad=True)torch.sigmoid(input=x).sum().backward()axes[1].plot(x.detach().numpy(), x.grad)axes[1].grid()axes[1].set_title('sigmoid激活函数')plt.show()
    ​
    ​
    if __name__ == '__main__':dm01()

  • tanh激活函数

    • tanh激活值范围是[-1, 1], 既有正信号, 又有负信号, 激活值是以0对称, 模型可以学习到正负信号

    • 加权求和值在[-3,3]范围, 计算激活值时分布到[-1, 1], 否则激活值只能是-1或1

    • tanh激活函数导数值范围是[0,1], 加权求和值在[-3,3]范围, 相比sigmoid激活导数更大, 模型收敛程度更快, 但是如果加权求和值大于3或小于-3, 也是会导致梯度消失, 最好分布在0附近(梯度值最大)

    • tanh激活函数可以在隐藏层使用, 不是优先选择, 浅层神经网络可以使用

    # tanh激活值: torch.tanh(x)
    ​
    import torch
    import matplotlib.pyplot as plt
    from torch.nn import functional as F
    # F.sigmoid()
    # F.tanh()
    ​
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    ​
    ​
    def dm01():# 创建x值, 线性模型输出值作为激活函数的输入值x = torch.linspace(-20, 20, 1000)# 计算激活值y = torch.tanh(input=x)# 创建画布对象和坐标轴对象_, axes = plt.subplots(1, 2)  # 一行两列, 绘制两个子图axes[0].plot(x, y)axes[0].grid()axes[0].set_title('tanh激活函数')
    ​# 创建x值,可以自动微分, 线性模型输出值作为激活函数的输入值x = torch.linspace(-20, 20, 1000, requires_grad=True)torch.tanh(input=x).sum().backward()axes[1].plot(x.detach().numpy(), x.grad)axes[1].grid()axes[1].set_title('tanh激活函数')plt.show()
    ​
    ​
    if __name__ == '__main__':dm01()

  • relu激活函数

    • relu激活值范围是[0, x], x是线性输出的正值, 只有正信号

    • 加权求和值大于0, 也可以一部分小于0(神经元死亡, 防止过拟合)

    • relu激活函数导数值0或1, 如果线性输出大于0, 导数为1, 不会出现梯度消失情况, 模型收敛程度更快; 如果线性输出小于0, 神经元死亡, 防止过拟合(选择leaky relu或prelu)

    • relu激活函数优先选择, 计算复杂度最小, 大于0不存在梯度消失情况

    # relu激活值: torch.relu(x)
    ​
    import torch
    import matplotlib.pyplot as plt
    from torch.nn import functional as F
    # F.sigmoid()
    # F.tanh()
    ​
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    ​
    ​
    def dm01():# 创建x值, 线性模型输出值作为激活函数的输入值x = torch.linspace(-20, 20, 1000)# 计算激活值y = torch.relu(input=x)# torch.leaky_relu()# torch.prelu()# 创建画布对象和坐标轴对象_, axes = plt.subplots(1, 2)  # 一行两列, 绘制两个子图axes[0].plot(x, y)axes[0].grid()axes[0].set_title('relu激活函数')
    ​# 创建x值,可以自动微分, 线性模型输出值作为激活函数的输入值x = torch.linspace(-20, 20, 1000, requires_grad=True)torch.relu(input=x).sum().backward()axes[1].plot(x.detach().numpy(), x.grad)axes[1].grid()axes[1].set_title('relu激活函数')plt.show()
    ​
    ​
    if __name__ == '__main__':dm01()

  • softmax激活函数

    • 多分类任务的输出层使用, 将输出层加权求和值转换成概率

    import torch
    import pandas as pd
    ​
    ​
    def dm01():# 创建输出层加权求和值y = torch.tensor(data=[[0.2, 0.02, 0.15, 0.15, 1.3, 0.5, 0.06, 1.1, 0.05, 3.75],[0.2, 0.02, 0.15, 3.75, 1.3, 0.5, 0.06, 1.1, 0.05, 0.15]])# softmax激活函数转换成概率值# 1轴按列计算# y_softmax = torch.softmax(input=y, dim=-1)y_softmax = torch.softmax(input=y, dim=1)print('y_softmax->', y_softmax)
    ​
    ​
    if __name__ == '__main__':dm01()

3.6 如何选择激活函数

  • 隐藏层

    • 优选relu激活函数, 其次选leaky relu/prelu

    • 尽量少使用sigmoid激活函数, 可以使用tanh激活函数代替sigmoid激活函数 浅层神经网络

  • 输出层

    • 二分类问题 sigmoid激活函数

    • 多分类问题 softmax激活函数

    • 回归问题 identity激活函数

4 参数初始化

4.1 参数初始化作用

  • 参数->w和b, 创建初版模型时指定w和b的值

  • 选择合适的参数, 计算得到的加权求和的值会落到激活函数合理的区间, 加快模型收敛速度以及增加不同学习特征值

4.2 常见参数初始化方法

  • 随机初始化

  • 全0、1初始化

  • 固定值初始化

  • kaiming初始化

  • xavier初始化

    import torch
    import torch.nn as nn
    ​
    ​
    # 随机参数初始化
    def dm01():# 创建线性层对象, 对线性层的权重进行初始化# in_features: 输入神经元个数# out_features: 输出神经元个数linear1 = nn.Linear(in_features=5, out_features=8)linear2 = nn.Linear(in_features=8, out_features=10)# 均匀分布初始化,默认在(0,1)区间均匀分布, 可以通过a和b参数调整区间nn.init.uniform_(linear1.weight)nn.init.uniform_(linear1.weight, a=-1/torch.sqrt(torch.tensor(5.0)), b=1/torch.sqrt(torch.tensor(5.0)))nn.init.uniform_(linear1.bias)print(linear1.weight)print(linear1.bias)
    ​
    ​
    # 正态分布参数初始化
    def dm02():# 创建线性层对象, 对线性层的权重进行初始化# in_features: 输入神经元个数# out_features: 输出神经元个数linear1 = nn.Linear(in_features=5, out_features=8)linear2 = nn.Linear(in_features=8, out_features=10)# 均匀分布初始化nn.init.normal_(linear1.weight)nn.init.normal_(linear1.bias)print(linear1.weight)print(linear1.bias)
    ​
    ​
    # nn.init.zeros_()  # 全0初始化
    # nn.init.ones_()  # 全1初始化
    # nn.init.constant_(val=0.1)  # 全固定值初始化
    # nn.init.kaiming_uniform_()  # 凯明均匀分布初始化
    # nn.init.kaiming_normal_()  # 凯明正态分布初始化
    # nn.init.xavier_uniform_()  # xavier均匀分布初始化
    # nn.init.xavier_normal_()  # xavier正态分布初始化
    ​
    ​
    if __name__ == '__main__':dm01()dm02()

4.3 如何选择参数初始化方法

  • 浅层神经网络可以选择随机初始化

  • 深层神经网络结合激活函数选择

    • tanh激活函数 -> xavier初始化

    • relu激活函数 -> kaiming初始化

相关文章:

PyTorch 线性回归模型构建与神经网络基础要点解析

笔记 1 PyTorch构建线性回归模型 1.1 创建数据集 import torch from torch.utils.data import TensorDataset # 创建x和y张量数据集对象 from torch.utils.data import DataLoader # 创建数据集加载器 import torch.nn as nn # 损失函数和回归函数 from torch.optim impo…...

PyTorch API 2 - 混合精度、微分、cpu、cuda、可视化

文章目录 自动混合精度包 - torch.amp自动类型转换参数说明 梯度缩放自动转换操作符参考操作符适用性CUDA 操作特定行为可自动转换为 float16 的 CUDA 运算可自动转换为 float32 的 CUDA 运算提升至最宽输入类型的 CUDA 操作优先使用 binary_cross_entropy_with_logits 而非 bi…...

window 显示驱动开发-AGP 类型伸缩空间段

AGP 类型的伸缩空间段类似于线性光圈空间段。 但是,内核模式显示微型端口驱动程序(KMD)不会通过 AGP 类型的伸缩空间段公开 dxgkDdiBuildPagingBuffer 回调函数的DXGK_OPERATION_MAP_APERTURE_SEGMENT和DXGK_OPERATION_UNMAP_APERTURE_SEGMEN…...

异地多活单元化架构下的微服务体系

治理服务间的跨IDC调用,而数据库层面还是要跨IDC 服务注册中心拆开、 金融要求,距离太远,异地备库,如果延迟没读到数据就可能有资损,IDC3平时不能用,IDC1挂了还是有数据同步问题,IDC3日常维护…...

LinkedList源码解析

添加元素方法 add方法详解 /*E:创建LinkedList对象时泛型中设置好的数据类型e: 传递的参数boolean: 添加成功即为true,添加失败即为false */public boolean add(E e) {// 在链表最后一个结点后面插入新结点(根据待插入元素封装的结点) linkLast(e);/…...

Android 13 使能user版本进recovery

在 debug 版本上,可以在关机状态下,同时按 电源键 和 音量加键 进 recovery 。 user 版本上不行。 参考 使用 build 变体 debug 版本和 user 版本的差别之一就是 ro.debuggable 属性不同。 顺着这个思路追踪,找到 bootable/recovery/reco…...

Docker 使用总结及完整示例介绍

以下是一份详细的 Docker 使用总结及完整示例介绍,涵盖基础概念、常用命令和实际应用场景: 一、Docker 核心概念 镜像 (Image) 只读模板,用于创建容器。例如:ubuntu:22.04, nginx:alpine 容器 (Container) 镜像的运行实例&#x…...

[Linux]多线程(二)原生线程库---pthread库的使用

[Linux]多线程(二)原生线程库—pthread库的使用 水墨不写bug 文章目录 一、pthread原生线程库的使用1. pthread_create全面的看待线程返回值2. pthread_join3. pthread_exit对比理解线程退出?1、return退出2、调用C库函数exit()退出3、调用pt…...

1.短信登录

1.0 问题记录 1.0.1 redis 重复 token 问题 每次用户登录时,后端会创建一个新的 token 并存入 Redis,但之前登录的 token 还没有过期。这可能会导致以下问题: 1. Redis 中存在大量未过期但实际已不使用的 token2. 同一用户可能有多个有效 …...

Vue v-model 深度解析:实现原理与高级用法

一、v-model 的本质 v-model 是 Vue 中最常用的指令之一,它本质上是一个语法糖,用于在表单元素和自定义组件上实现双向数据绑定。在 Vue 2.x 和 Vue 3.x 中,v-model 的实现机制有所不同,但核心思想都是简化数据绑定的过程。 1.1…...

Java动态代理超详细解析:三步+内存图(堆栈分析)

0.本文适合谁? 1.刚学Java动态代理,被Proxy、InvocationHandler绕晕的同学 2.想彻底搞懂代理对象在内存中如何工作的开发者 3.需要面试突击动态代理知识的求职 1.动态代理的本质(三步走) 动态代理的核心可以拆解为三个关键…...

MySQL 从入门到精通(六):视图全面详解 —— 虚拟表的灵活运用

在数据库开发中,我们经常需要重复执行复杂的多表查询,或是需要限制用户只能访问特定数据。这时候,MySQL 的 视图(View)就能大显身手。作为一种 “虚拟表”,视图不存储实际数据,却能基于 SQL 查询…...

Linux 下 Java 部署环境搭建与项目部署详细步骤

目录 1. 软件环境准备 1.1 更新软件包库 1.2 安装 OpenJDK 1.3 安装 MySQL 数据库 2. 部署 Web 项目到 Linux 2.1 数据准备和配置 2.2 Maven 打包项目 2.3 上传 Jar 包至云服务器 2.4 启动应用程序 2.5 配置防火墙与端口开放 2.6 访问与验证项目 2.7 进程管理与问题…...

养生:为健康生活添彩

养生是对生活的热爱,是为健康生活注入活力的良方。从饮食、运动到生活习惯,每一个方面都能让我们离健康更近一步。以下是一些实用的养生之道,助你开启健康生活的新旅程。 饮食养生:营养均衡,健康基石 合理的饮食是养…...

Hypermesh四面体网格划分(二)

我们找到“3D-tetramesh”的命令,然后选择“tetra mesh”,以下就是这种四面体网格生成方式的面板。见图1所示。 图1 tetra mesh面板 下面以一个法兰盘的四面体网格划分作为案例,具体介绍基于表面网格的四面体网格生成方式。 首先导入几何模型…...

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类边距QMargins)

文章目录 类概述方法总览使用注意事项简单示例 类概述 QMargins 类用于描述矩形四周边框尺寸,包含左(left)、上(top)、右(right)、下(bottom)四个整型边距值。当所有边距均为0时,isNull() 返回 True。该类支持流式操作和比较运算。 版本信息&#xff1…...

python笔记和练习----少儿编程课程【阶段二(二)】

第13课 列表元素的查找和删除 知识点 1、删除第一个出现的指定元素 列表.remove(元素) 2.删除末尾元素 列表.pop() 3、清空列表的所有数据 列表.clear() 4、删除指定位置的元素 del 列表[索引] del 关键字本质上是用来 将一个变量从内存中删除…...

Excel里面怎样批量去掉字串包含的标点符号

在Excel中批量去除字符串中的标点符号,可以通过以下几种方法实现: 方法1:使用SUBSTITUTE函数嵌套 适用于已知的特定标点符号(需手动列出): SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1, ",&quo…...

Linux 信号终篇(总结)

前文:本文是对信号从产生到被处理的过程中的概念和原理的总结,如果想了解具体实现,请查看前两篇博客:Linux 信号-CSDN博客、Linux 信号(下篇)-CSDN博客 一、信号的产生 1.1 信号产生的五种条件 ①键盘组…...

Springboot之会话技术

会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器&#xff…...

数字信号处理|| 离散系统的冲激响应和阶跃响应

一、实验目的 (1)加深对离散线性移不变(LSI)系统基本理论的理解,明确差分方程与系统函数之间的关系。 (2)初步了解用MATLAB语言进行离散时间系统研究的基本方法。 (3)掌…...

JVM 数据区域

JVM 数据区域 1 程序计数器 程序计数器(Program Counter Register) ,也有称作为PC寄存器。在汇编语言中,程序计数器是指CPU中的寄存器,它保存的是程序当前执行的指令的地址,当CPU需要执行指令时&#xff0…...

MRNet 数据集分享

MRNet 数据集分享 包括了2001年1月1日至2012年12月31日期间在斯坦福大学医学中心进行的1370次膝关节MRI检查(平均年龄38.0岁;569例(41.5%)女性患者)。该数据集包含 1,104 (80.6%) 次异常检查,其中319 (23.…...

MCP项目实例 - client sever交互

1. 项目概述 项目目标 构建一个本地智能舆论分析系统。 利用自然语言处理和多工具协作,实现用户查询意图的自动理解。 进行新闻检索、情绪分析、结构化输出和邮件推送。 系统流程 用户查询:用户输入查询请求。 提取关键词:从用户查询中…...

uniapp|实现商品分类与列表数据联动,左侧菜单右侧商品列表(瀑布流、高度自动计算、多端兼容)

基于uniapp实现商品分类与商品列表数据联动,提供完整代码与常见问题解决方案,通过实战案例演示,快速构建商品列表交互,开箱即用。 目录 前言应用场景介绍页面布局与样式整体结构分析左侧菜单样式右侧商品列表样式核心功能实现数据绑定与渲染点击事件交互性能优化图片懒加载…...

1.2.2.1.4 数据安全发展技术发展历程:高级公钥加密方案——同态加密

引言 在密码学领域,有一种技术被图灵奖得主、著名密码学家Oded Goldreich誉为"密码学圣杯",那就是全同态加密(Fully Homomorphic Encryption)。今天我们就来聊聊这个神秘而强大的加密方案是如何从1978年的概念提出&…...

dify插件接入fastmcp示例

文章目录 1. 使用python完成mcp服务1.1 准备环境(python安装fastmcp)1.2 mcp服务端示例代码1.3 启动mcp服务端 2. dify接入2.1 安装MCP SSE和 Agent 策略(支持 MCP 工具) 插件2.2 dify agent插件配置mcp:2.3 mcp服务配置&#xff…...

从文本到语义:BERT、Faiss 与 Elasticsearch 的协同实践

从文本到语义:BERT、Faiss 与 Elasticsearch 的协同实践 在自然语言处理(NLP)的技术栈中,BERT、Faiss 和 Elasticsearch 是三个具有代表性的工具,它们各自发挥着独特的作用。BERT 负责文本的语义理解,Fais…...

安装或更新 CUDA Toolkit - Ubuntu - RuntimeError

1、问题 执行 pip install flash-attn --no-build-isolation 时,出错: RuntimeError: FlashAttention is only supported on CUDA 11.7 and above. Note: make sure nvcc has a torch.__version__ 2.4.0cu12 执行 nvcc --version 或 nvcc -V&…...

二、Hive安装部署详细过程

Apache Hive 是一个构建在 Hadoop 之上的数据仓库基础设施。它提供了类似 SQL 的查询语言 (称为 HiveQL 或 HQL),让熟悉 SQL 的开发人员和分析师能够轻松地查询和分析存储在 HDFS 或其他兼容存储系统中的大规模数据集。把结构化或半结构化的数据映射成表&#xff0c…...

常见的降维算法

作业: 自由作业:探索下什么时候用到降维?降维的主要应用?或者让ai给你出题,群里的同学互相学习下。可以考虑对比下在某些特定数据集上t-sne的可视化和pca可视化的区别。 一、什么时候用到降维? 降维通常…...

Spring Boot 中如何启用 MongoDB 事务

在 Spring Boot 中启用和使用 MongoDB 事务主要依赖于以下几个方面: MongoDB 服务器和部署模式: MongoDB 版本 4.0 或更高版本才支持副本集 (Replica Set) 上的多文档 ACID 事务。MongoDB 版本 4.2 或更高版本才支持分片集群 (Sharded Cluster) 上的多文…...

2025年5月15日前 免费考试了! Oracle AI 矢量搜索专业​​认证

2025年5月5日前 免费考试了! Oracle AI 矢量搜索专业​​认证 立刻预约吧 文章目录 2025年5月5日前 免费考试了! Oracle AI 矢量搜索专业​​认证立刻预约吧🔍 探索 AI 向量搜索的强大功能!🎯 学习路径目标&#x1f6e…...

初等数论--莫比乌斯反演

1. 定义 假设 f ( n ) g ( n ) f(n)\ g(n) f(n) g(n)是定义在正整数上的两个函数 ,且 f ( n ) ∑ d ∣ n g ( d ) ∑ d ∣ n g ( n d ) f(n)\sum_{d|n}g(d)\sum_{d|n}g(\frac{n}{d}) f(n)d∣n∑​g(d)d∣n∑​g(dn​) 那么 g ( n ) ∑ d ∣ n μ ( d ) f ( n d…...

访问者模式(Visitor Pattern)详解

文章目录 1. 访问者模式概述1.1 定义1.2 基本思想2. 访问者模式的结构3. 访问者模式的UML类图4. 访问者模式的工作原理5. Java实现示例5.1 基本实现示例5.2 访问者模式处理复杂对象层次结构5.3 访问者模式在文件系统中的应用6. 访问者模式的优缺点6.1 优点6.2 缺点7. 访问者模式…...

C++ 关联式容器:map,multimap,set,multiset

目录 引言 一、关联式容器概述 1.1 与序列式容器的区别 1.2 底层结构 二、set容器详解set介绍 2.1 set的特性 2.2 set的模板参数 2.3 set的常用接口 2.4 set使用示例 三、map容器详解map介绍 3.1 map的特性 3.2 map的模板参数 3.3 map的常用接口 3.4 map使用示例 …...

Discriminative and domain invariant subspace alignment for visual tasks

用于视觉任务的判别性和域不变子空间对齐 作者:Samaneh Rezaei,Jafar Tahmoresnezhad 文章于2018年12月4日收到,2019年5月24日被接受,2019年6月3日在线发表于Iran Journal of Computer Science期刊,DOI: 10.1007/s42…...

comfyui 如何优雅的从Hugging Face 下载模型,文件夹

如下图所示 使用git 下载整个仓库然后把需要的放到对应的位置...

【C++】 —— 笔试刷题day_27

一、kotori和气球 题目解析 这道题,有n中气球,每一种气球有无数多个;现在我们需要将这些气球摆成一排,但是,如果相邻的气球是相同的就会发生爆炸(也就是说,相同的气球相邻的摆法是不合法的&…...

2025年“深圳杯”数学建模挑战赛C题国奖大佬万字思路助攻

完整版1.5万字论文思路和Python代码下载:https://www.jdmm.cc/file/2712073/ 引言 本题目旨在分析分布式能源 (Distributed Generation, DG) 接入配电网系统后带来的风险。核心风险评估公式为: R P_{loss} \times C_{loss} P_{over} \times C_{over}…...

大模型微调指南之 LLaMA-Factory 篇:一键启动LLaMA系列模型高效微调

文章目录 一、简介二、如何安装2.1 安装2.2 校验 三、开始使用3.1 可视化界面3.2 使用命令行3.2.1 模型微调训练3.2.2 模型合并3.2.3 模型推理3.2.4 模型评估 四、高级功能4.1 分布训练4.2 DeepSpeed4.2.1 单机多卡4.2.2 多机多卡 五、日志分析 一、简介 LLaMA-Factory 是一个…...

游戏引擎学习第268天:合并调试链表与分组

回顾并为今天的内容设定基调 我们正在直播中开发完整的游戏,目前调试系统的开发已接近尾声。这个调试系统的构建过程经历了较长的时间,中间还暂停过一段时间去做硬件渲染路径的开发,并在已有的软件渲染路径基础上进行了扩展。后来我们又回到…...

【Linux系统编程】进程属性--标识符

1.PID 1.1什么是PID? 区分进程的唯一性 1.2如何查看进程? ps ajx | head -1 ; ps ajx | grep myproc 或者ps ajx | head -1 && ps ajx | grep myproc | grep -v grep(过滤掉grep本身这个进程) 1.3进程有哪两种&#…...

React文档-State数据扁平化

1、选择 State 结构 思考一下: 如果渲染列表, 并更新列表数据在下面展示~ state 过去常常是这样复制的: items [{ id: 0, title: pretzels}, ...]selectedItem {id: 0, title: pretzels} 改了之后是这样的:items [{ id: 0, …...

kotlin flow防抖

一 防抖设计 ✅ 1. 点击事件的防抖:用于防止频繁触发逻辑 🎯 适用场景: 用户连续快速点击按钮,可能会导致多次发送网络请求、CAN 指令或反复切换状态等副作用。所以我们通常在点击函数中处理防抖,例如: …...

基础语法(二)

Mysql基础语法(二) Mysql基础语法(二)主要介绍Mysql中稍微进阶一点的内容,会稍微有一些难度(博主个人认为)。学习完基础语法(一)和基础语法(二)之…...

FreeTex v0.2.0:功能升级/支持Mac

概述 FreeTex在发布之后,迎来很多反馈,本次根据主流的反馈建议,又进行一轮小升级,正式发布v0.2.0版本,主要升级点如下: 新增识别结果预览显示 Latex识别结果支持格式化输出 软件体积更小,并移…...

MacOS 用brew 安装、配置、启动Redis

MacOS 用brew 安装、配置、启动Redis 一、安装 brew install redis 二、启动 brew services start redis 三、用命令行检测 set name tom get name...

大型旋转机械信号分解算法模块

大型旋转机械信号分解算法模块,作为信号处理算法工具箱的主要功能模块,可应用于各类关键机械部件(轴承、齿轮、转子、联轴器等)的信号分析、故障探测、趋势劣化评估等,采用全Python语言,以B/S模式&#xff…...

Java 中的数据类型误导点!!!

在 Java 中,数据类型分为两大类:基本类型(Primitive Types) 和 引用类型(Reference Types)。它们的存储方式和行为完全不同。 1. 基本类型 Java 有 8 种基本数据类型,它们直接存储值&#xff…...