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

深度学习基础1

目录

1. 深度学习的定义

2.神经网络

2.1. 感知神经网络

2.2 人工神经元

2.2.1 构建人工神经元

2.2.2 组成部分

2.2.3 数学表示

2.2.4 对比生物神经元

2.3 深入神经网络

2.3.1 基本结构

2.3.2 网络构建

2.3.3 全连接神经网络

3.神经网络的参数初始化

3.1 固定值初始化

3.1.1 全零初始化

3.1.2 全1初始化

3.1.3 任意常数初始化

3.2 随机初始化

3.2.1 均匀初始化

3.2.2 正态分布初始化

3.3 Xavier 初始化 / Glorot 初始化

3.4 He初始化 / kaiming 初始化

4.激活函数

4.1 非线性

4.2 非线性可视化

4.3 常见激活函数

4.3.1 Sigmoid

4.2.2 Tanh

4.2.3 ReLU

2.2.4 LeakyReLU

4.2.5 Softmax

4.4 选择激活函数

4.4.1 隐藏层

4.4.2 输出层


1. 深度学习的定义

        传统机器学习算法依赖人工设计特征、提取特征,而深度学习依赖算法自动提取特征。深度学习模仿人类大脑的运行方式,从大量数据中学习特征,这也是深度学习被看做黑盒子、可解释性差的原因。

        人工智能、机器学习和深度学习之间的关系:

2.神经网络

深度学习(Deep Learning)是神经网络的一个子领域,主要关注更深层次的神经网络结构,也就是深层神经网络(Deep Neural Networks,DNNs)。

2.1. 感知神经网络

神经网络(Neural Networks)是一种模拟人脑神经元网络结构的计算模型,用于处理复杂的模式识别、分类和预测等任务。生物神经元如下图:

生物学:

人脑可以看做是一个生物神经网络,由众多的神经元连接而成

  • 树突:从其他神经元接收信息的分支

  • 细胞核:处理从树突接收到的信息

  • 轴突:被神经元用来传递信息的生物电缆

  • 突触:轴突和其他神经元树突之间的连接

人脑神经元处理信息的过程:

  • 多个信号到达树突,然后整合到细胞体的细胞核中

  • 当积累的信号超过某个阈值,细胞被激活

  • 产生一个输出信号,由轴突传递。

神经网络由多个互相连接的节点(即人工神经元)组成。

2.2 人工神经元

人工神经元(Artificial Neuron)是神经网络的基本构建单元,模仿了生物神经元的工作原理。其核心功能是接收输入信号,经过加权求和和非线性激活函数处理后,输出结果。

2.2.1 构建人工神经元

人工神经元接受多个输入信息,对它们进行加权求和,再经过激活函数处理,最后将这个结果输出。

2.2.2 组成部分

  • 输入(Inputs): 代表输入数据,通常用向量表示,每个输入值对应一个权重。

  • 权重(Weights): 每个输入数据都有一个权重,表示该输入对最终结果的重要性。

  • 偏置(Bias): 一个额外的可调参数,作用类似于线性方程中的截距,帮助调整模型的输出。

  • 加权求和: 神经元将输入乘以对应的权重后求和,再加上偏置。

  • 激活函数(Activation Function): 用于将加权求和后的结果转换为输出结果,引入非线性特性,使神经网络能够处理复杂的任务。常见的激活函数有Sigmoid、ReLU(Rectified Linear Unit)、Tanh等。

2.2.3 数学表示

2.2.4 对比生物神经元

人工神经元和生物神经元对比如下表:

生物神经元人工神经元
细胞核节点 (加权求和 + 激活函数)
树突输入
轴突带权重的连接
突触输出

2.3 深入神经网络

神经网络是由大量人工神经元按层次结构连接而成的计算模型。每一层神经元的输出作为下一层的输入,最终得到网络的输出。

2.3.1 基本结构

神经网络有下面三个基础层(Layer)构建而成:

  • 输入层(Input): 神经网络的第一层,负责接收外部数据,不进行计算。

  • 隐藏层(Hidden): 位于输入层和输出层之间,进行特征提取和转换。隐藏层一般有多层,每一层有多个神经元。

  • 输出层(Output): 网络的最后一层,产生最终的预测结果或分类结果

2.3.2 网络构建

我们使用多个神经元来构建神经网络,相邻层之间的神经元相互连接,并给每一个连接分配一个权重,经典如下:

注意:同一层的各个神经元之间是没有连接的。  

2.3.3 全连接神经网络

全连接(Fully Connected,FC)神经网络是前馈神经网络的一种,每一层的神经元与上一层的所有神经元全连接,常用于图像分类文本分类等任务。

特点:

  • 全连接层: 层与层之间的每个神经元都与前一层的所有神经元相连。

  • 权重数量: 由于全连接的特点,权重数量较大,容易导致计算量大、模型复杂度高。

  • 学习能力: 能够学习输入数据的全局特征,但对于高维数据却不擅长捕捉局部特征。

计算步骤:

(1)数据传递: 输入数据经过每一层的计算,逐层传递到输出层。

(2)激活函数: 每一层的输出通过激活函数处理。

(3)损失计算: 在输出层计算预测值与真实值之间的差距,即损失函数值。

(4)反向传播Back Propagation): 通过反向传播算法计算损失函数对每个权重的梯度,并更新权重以最小化损失。

3.神经网络的参数初始化

神经网络的参数初始化是训练深度学习模型的关键步骤之一。初始化参数(通常是权重和偏置)会对模型的训练速度、收敛性以及最终的性能产生重要影响。

官方文档参考:torch.nn.init — PyTorch 2.5 documentation

3.1 固定值初始化

固定值初始化是指在神经网络训练开始时,将所有权重或偏置初始化为一个特定的常数值。

3.1.1 全零初始化

将神经网络中的所有权重参数初始化为0。

方法:将所有权重初始化为零。

缺点:导致对称性破坏,每个神经元在每一层中都会执行相同的计算,模型无法学习

应用场景:通常不用来初始化权重,但可以用来初始化偏置

import torch
import torch.nn as nnlinear =nn.Linear(in_features=6,out_features=4)
nn.init.zeros_(linear.weight)print(linear.weight)

3.1.2 全1初始化

全1初始化会导致网络中每个神经元接收到相同的输入信号,进而输出相同的值,这就无法进行学习和收敛。所以全1初始化只是一个理论上的初始化方法,但在实际神经网络的训练中并不适用。

linear =nn.Linear(in_features=6,out_features=4)
nn.init.ones_(linear.weight)print(linear.weight)

3.1.3 任意常数初始化

将所有参数初始化为某个非零的常数。虽然不同于全0和全1,但这种方法依然不能避免对称性破坏的问题。

linear =nn.Linear(in_features=6,out_features=4)
nn.init.constant_(linear.weight,0.54)print(linear.weight)

3.2 随机初始化

方法:将权重初始化为随机的小值,通常从正态分布或均匀分布中采样。

应用场景:这是最基本的初始化方法,通过随机初始化避免对称性破坏。

3.2.1 均匀初始化

linear =nn.Linear(in_features=6,out_features=4)
nn.init.uniform_(linear.weight)print(linear.weight)

3.2.2 正态分布初始化

linear =nn.Linear(in_features=6,out_features=4)
nn.init.normal_(linear.weight,mean=4,std=2)print(linear.weight)

3.3 Xavier 初始化 / Glorot 初始化

方法:根据输入和输出神经元的数量来选择权重的初始值。权重从以下分布中采样:

优点:平衡了输入和输出的方差,适合Sigmoid 和 Tanh 激活函数

应用场景:常用于浅层网络或使用Sigmoid 、Tanh 激活函数的网络。

linear = nn.Linear(in_features=6,out_features=4)
nn.init.xavier_normal_(linear.weight)print(linear.weight)linear = nn.Linear(in_features=6,out_features=4)
nn.init.xavier_uniform_(linear.weight)print(linear.weight)

3.4 He初始化 / kaiming 初始化

方法:专门为 ReLU 激活函数设计。权重从以下分布中采样:

优点适用于ReLU 和 Leaky ReLU 激活函数

应用场景:深度网络,尤其是使用 ReLU 激活函数时。

linear = nn.Linear(in_features=6,out_features=4)
nn.init.kaiming_normal_(linear.weight)print(linear.weight)linear = nn.Linear(in_features=6,out_features=4)
nn.init.kaiming_uniform_(linear.weight)print(linear.weight)

4.激活函数

激活函数的作用是在隐藏层引入非线性,使得神经网络能够学习和表示复杂的函数关系,使网络具备非线性能力,增强其表达能力。

4.1 非线性

如果在隐藏层不使用激活函数,那么整个神经网络会表现为一个线性模型。

线性模型中无论网络多少层:

  • 无法捕捉数据中的非线性关系。
  • 激活函数是引入非线性特性、使神经网络能够处理复杂问题的关键。

4.2 非线性可视化

可以通过可视化的方式去理解非线性的拟合能力

A Neural Network Playground

4.3 常见激活函数

        激活函数通过引入非线性来增强神经网络的表达能力,对于解决线性模型的局限性至关重要。由于反向传播算法(BP)用于更新网络参数,因此激活函数必须是可微的,也就是说能够求导的。

4.3.1 Sigmoid

Sigmoid激活函数是一种常见的非线性激活函数。它将输入映射到0到1之间的值,因此非常适合处理概率问题,比如二分类问题。

公式:

其中,e 是自然常数(约等于2.718),x 是输入。  

特征:

  • 将任意实数输入映射到 (0, 1)之间。
  • sigmoid函数一般只用于二分类的输出层。
  • 微分性质: 导数计算比较方便,可以用自身表达式来表示:

缺点:

  • 梯度消失: 在输入非常大或非常小时,Sigmoid函数的梯度会变得非常小,接近于0。这导致在反向传播过程中,梯度逐渐衰减。最终使得早期层的权重更新非常缓慢,进而导致训练速度变慢甚至停滞。

  • 信息丢失:输入的数据相差巨大,但输出结果变化小。

  • 计算成本高: 由于涉及指数运算。

函数绘制:

import torch
import matplotlib.pyplot as plt# 中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False_,ax = plt.subplots(1,2)# 1.绘制sigmoid函数
x = torch.linspace(-10,10,100)
y = torch.sigmoid(x)ax[0].grid(True)
ax[0].set_title('sigmoid函数曲线图')
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[0].plot(x,y)# 2.绘制sigmoid导函数
x1 = torch.linspace(-10,10,100)y1 =torch.sigmoid(x1)*(1-torch.sigmoid(x1))ax[1].grid(True)
ax[1].set_title('sigmoid函数曲线图')
ax[1].set_xlabel('x1')
ax[1].set_ylabel('y1')
ax[1].plot(x1,y1)
ax[1].lines[0].set_color('red')plt.show()

4.2.2 Tanh

tanh(双曲正切)是一种常见的非线性激活函数,常用于神经网络的隐藏层。tanh 函数也是一种S形曲线,输出范围为(−1,1)。

公式:

特征:

  • 输出范围: 将输入映射到(-1, 1)之间。相比于Sigmoid函数,这种零中心化的输出有助于加速收敛。

  • 对称性: Tanh函数关于原点对称,因此在输入为0时,输出也为0。这种对称性有助于在训练神经网络时使数据更平衡。

  • 平滑性: Tanh函数在整个输入范围内都是连续且可微的,这使其非常适合于使用梯度下降法进行优化。

缺点:

  • 梯度消失: 虽然一定程度上改善了梯度消失问题,但在输入值非常大或非常小时导数还是非常小,这在深层网络中仍然是个问题。

  • 计算成本: 由于涉及指数运算。

函数绘制:

4.2.3 ReLU

ReLU(Rectified Linear Unit)全称是修正线性单元

公式:

ReLU 函数定义如下:

即ReLU对输入x进行非线性变换:

特征:

  • 计算简单:ReLU 的计算非常简单,只需要对输入进行一次比较运算,这在实际应用中大大加速了神经网络的训练。

  • ReLU 函数的导数是分段函数

  • 缓解梯度消失问题:相比于 Sigmoid 和 Tanh 激活函数,ReLU 在正半区的导数恒为 1,这使得深度神经网络在训练过程中可以更好地传播梯度,不存在饱和问题

  • 稀疏激活:ReLU在输入小于等于 0 时输出为 0,这使得 ReLU 可以在神经网络中引入稀疏性(即一些神经元不被激活),这种稀疏性可以提升网络的泛化能力。

缺点:

神经元死亡:由于ReLU在x≤0时输出为0,如果某个神经元输入值是负,那么该神经元将永远不再激活,成为“死亡”神经元。随着训练的进行,网络中可能会出现大量死亡神经元,会降低模型的表达能力

函数绘图:

# 创建子图
fig, ax = plt.subplots(1, 2)# 1. 绘制 relu 函数
x = torch.linspace(-10, 10, 100)
y = torch.relu(x)ax[0].grid(True)
ax[0].set_title('relu函数曲线图')
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[0].plot(x, y, label='relu函数')# 2. 绘制 relu 导函数
x1 = torch.linspace(-10, 10, 100, requires_grad=True)
torch.relu(x1).sum().backward()ax[1].grid(True)
ax[1].set_title('relu导函数曲线图')
ax[1].set_xlabel('x1')
ax[1].set_ylabel('y1')
ax[1].plot(x1.detach().numpy(), x1.grad.detach().numpy(), color='red', label='relu导函数')# 添加图例
ax[0].legend()
ax[1].legend()plt.tight_layout()
plt.show()

2.2.4 LeakyReLU

Leaky ReLU是一种对 ReLU 函数的改进,旨在解决 ReLU 的一些缺点,特别是Dying ReLU 问题。Leaky ReLU 通过在输入为负时引入一个小的负斜率来改善这一问题。

公式:

Leaky ReLU 函数的定义如下:


其中,\alpha 是一个非常小的常数(如 0.01),它控制负半轴的斜率。这个常数 \alpha是一个超参数,可以在训练过程中可自行进行调整。

特征:

  • 避免神经元死亡:通过在负半区域引入一个小的负斜率,这样即使输入值小于等于零,Leaky ReLU仍然会有梯度,允许神经元继续更新权重,避免神经元在训练过程中完全“死亡”的问题。

  • 计算简单:Leaky ReLU 的计算与 ReLU 相似,只需简单的比较和线性运算,计算开销低。

缺点:

  • 参数选择:\alpha 是一个需要调整的超参数,选择合适的\alpha 值可能需要实验和调优。

  • 出现负激活:如果\alpha 设定得不当,仍然可能导致激活值过低。

函数绘制:

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt# 创建子图
fig, ax = plt.subplots(1, 2)# 1. 绘制 leaky_relu 函数
x = torch.linspace(-5, 5, 200, requires_grad=True)
slope = 0.03
y = F.leaky_relu(x, slope)ax[0].grid(True)
ax[0].set_title('leaky_relu函数曲线图')
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[0].plot(x.detach().numpy(), y.detach().numpy(), label='leaky_relu函数')# 2. 绘制 leaky_relu 导函数
y.sum().backward()  # 计算梯度ax[1].grid(True)
ax[1].set_title('leaky_relu导函数曲线图')
ax[1].set_xlabel('x')
ax[1].set_ylabel('y')
ax[1].plot(x.detach().numpy(), x.grad.detach().numpy(), color='red', label='leaky_relu导函数')# 添加图例
ax[0].legend()
ax[1].legend()plt.tight_layout()
plt.show()

4.2.5 Softmax

Softmax激活函数通常用于分类问题的输出层,它能够将网络的输出转换为概率分布,使得输出的各个类别的概率之和为 1。Softmax 特别适合用于多分类问题

公式:

特征:

  • 将输出转化为概率:通过Softmax,可以将网络的原始输出转化为各个类别的概率,从而可以根据这些概率进行分类决策。

  • 概率分布:Softmax的输出是一个概率分布,即每个输出值\text{Softmax}(z_i)都是一个介于0和1之间的数,并且所有输出值的和为 1

  • 突出差异:Softmax会放大差异,使得概率最大的类别的输出值更接近1,而其他类别更接近0。

  • 在实际应用中,Softmax常与交叉熵损失函数Cross-Entropy Loss结合使用,用于多分类问题。在反向传播中,Softmax的导数计算是必需的。

缺点:

(1)数值不稳定性:在计算过程中,如果z_i的数值过大,e^{z_i}可能会导致数值溢出。因此在实际应用中,经常会对z_i进行调整,如减去最大值以确保数值稳定。

解释:

  • z_i-\max(z)是一个非正数,那么e^{z_i - \max(z)}的值就位于0到1之间,有效避免了数值溢出。
  • 这中调整不会改变Softmax的概率分布结果,因为从数学的角度讲相当于分子、分母都除以了e^{\max(z)}。

(2)难以处理大量类别:Softmax在处理类别数非常多的情况下(如大模型中的词汇表)计算开销会较大。

代码示例:

x = torch.Tensor([[0.8,10,2,4.5],[1.32,6.0,7.71,11]])
y = nn.Softmax(x)
print(y)x = torch.Tensor([[0.8,10,2,4.5],[1.32,6.0,7.71,11]])
y = F.softmax(x)
print(y)

4.4 选择激活函数

更多激活函数可以查看官方文档:

torch.nn — PyTorch 2.5 documentation

4.4.1 隐藏层

  • 优先选ReLU;

  • 如果ReLU效果较差,那么尝试其他激活函数,如Leaky ReLU等;

  • 使用ReLU时注意神经元死亡问题, 避免出现过多神经元死亡;

  • 不使用sigmoid,尝试使用tanh;

4.4.2 输出层

  • 二分类问题选择sigmoid激活函数;

  • 多分类问题选择softmax激活函数;

  • 回归问题选择identity激活函数;

相关文章:

深度学习基础1

目录 1. 深度学习的定义 2.神经网络 2.1. 感知神经网络 2.2 人工神经元 2.2.1 构建人工神经元 2.2.2 组成部分 2.2.3 数学表示 2.2.4 对比生物神经元 2.3 深入神经网络 2.3.1 基本结构 2.3.2 网络构建 2.3.3 全连接神经网络 3.神经网络的参数初始化 3.1 固定值初…...

《FPGA开发工具》专栏目录

《FPGA开发工具》专栏目录 1.Vivado开发 1.1使用相关 Vivado工程创建、仿真、下载与固化全流程 Vivado工程快速查看软件版本与器件型号 Vivado IP核的快速入门 官方手册和例程 Vivado中对已调用IP核的重命名 Vivado中增加源文件界面中各选项的解释 Vivado IP中Generate…...

李春葆《数据结构》-查找-课后习题代码题

一&#xff1a;设计一个折半查找算法&#xff0c;求查找到关键字为 k 的记录所需关键字的比较次数。假设 k 与 R[i].key 的比较得到 3 种情况&#xff0c;即 kR[i].key&#xff0c;k<R[i].key 或者 k>R[i].key&#xff0c;计为 1 次比较&#xff08;在教材中讨论关键字比…...

【Git】:分支管理

目录 理解分支 创建分支 切换分支 合并分支 删除分支 合并冲突 分支管理策略 快进合并 正常合并 bug 分支 总结 理解分支 在版本控制系统中&#xff0c;分支是一条独立的开发线路。它允许开发者从一个主要的代码基线&#xff08;例如master分支&#xff09;分离出来…...

C、C++ 和 Java的区别

C、C 和 Java 是三种广泛使用的编程语言&#xff0c;它们各有特点&#xff0c;适合不同的应用场景。以下从多个角度对它们的区别进行分析&#xff1a; 基础特性 特性CCJava语言类型过程式编程语言过程式 面向对象编程语言纯面向对象编程语言&#xff08;也支持过程式&#x…...

【Python-Open3D学习笔记】005Mesh相关方法

TriangleMesh相关方法 文章目录 TriangleMesh相关方法1. 查看mesh三角形面信息2. 可视化三角形3. 上采样4. 计算mesh形成的面积和体积 1. 查看mesh三角形面信息 def view_hull_triangles(hull: o3d.geometry.TriangleMesh):"""查看mesh三角形面信息&#xff08…...

js原型、原型链和继承

文章目录 一、原型1、prototype2、constructor 二、原型链1、字面量原型链2、字面量继承3、构造函数的原型链4、Object.create5、Object.setPrototypeOf 三、继承1、构造函数继承2、原型链继承3、组合继承 四、常见链条1、Function2、Object.prototype 继承是指将特性从父代传递…...

团队自创【国王的魔镜-2】

国王的魔镜-2 题目描述 国王有一个魔镜&#xff0c;可以把任何接触镜面的东西变成原来的两倍——只是&#xff0c;因为是镜子嘛&#xff0c;增加的那部分是反的。比如一条项链&#xff0c;我们用AB来表示&#xff0c;不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话&am…...

c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享

在嵌入式系统中&#xff0c;有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器&#xff0c;通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片&#xff0c;驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…...

【Jenkins】docker 部署 Jenkins 踩坑笔记

文章目录 1. docker pull 超时2. 初始化找不到 initialAdminPassword 1. docker pull 超时 docker pull 命令拉不下来 docker pull jenkins/jenkins:lts-jdk17 Error response from daemon: Get "https://registry-1.docker.io/v2/": 编辑docker配置 sudo mkdir -…...

Unreal Engine使用Groom 打包后报错

Unreal Engine使用Groom打包后报错 版本5.4.4 blender 4.2.1 项目头发用了groom&#xff0c;运行后报错 错误&#xff1a; Assertion failed: Offset BytesToRead < UncompressedFileSize && Offset > 0 [File:E:\UnrealEngine-5.4.4-release\Engine\Source\R…...

嵌入式QT学习第3天:UI设计器的简单使用

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 Qt Creator 里自带的 Qt Designer&#xff0c;使用 Qt Designer 比较方便的构造 UI 界 面。 在 UI 文件添加一个按钮 左边找到 Push Button&#xff0c;然后拖拽到中…...

【连接池】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

图论入门编程

卡码网刷题链接&#xff1a;98. 所有可达路径 一、题目简述 二、编程demo 方法①邻接矩阵 from collections import defaultdict #简历邻接矩阵 def build_graph(): n, m map(int,input().split()) graph [[0 for _ in range(n1)] for _ in range(n1)]for _ in range(m): …...

在Java中使用Apache POI导入导出Excel(三)

本文将继续介绍POI的使用&#xff0c;上接在Java中使用Apache POI导入导出Excel&#xff08;二&#xff09; 使用Apache POI组件操作Excel&#xff08;三&#xff09; 24、拆分和冻结窗格 您可以创建两种类型的窗格;冻结窗格和拆分窗格。 冻结窗格按列和行进行拆分。您创建…...

UR开始打中国牌,重磅发布国产化协作机器人UR7e 和 UR12e

近日&#xff0c;优傲&#xff08;UR&#xff09;机器人公司立足中国市场需求&#xff0c;重磅推出UR7e和UR12e 两款本地化协作机器人。它们延续优傲&#xff08;UR&#xff09;一以贯之的高品质与性能特质&#xff0c;着重优化负载自重比&#xff0c;且在价格层面具竞争力&…...

FRU文件

FRU&#xff08;Field Replaceable Unit&#xff09;源文件的格式通常遵循IPMI FRU Information Storage Definition标准。在实际应用中&#xff0c;FRU源文件可以是JSON格式的&#xff0c;这种格式允许用户指定所有的FRU信息字段。以下是FRU源文件的JSON格式的一些关键点&…...

AI需求条目化全面升级!支持多格式需求,打破模板限制!

AI需求条目化全面升级&#xff01;支持多格式需求&#xff0c;打破模板限制&#xff01; 一、多格兼济 标准立成 1、功能揭秘 预览未来 平台需求板块的AI需求条目化功能迎来全面升级。它支持多种需求格式&#xff0c;不再受限于模板文件&#xff0c;能够一键自动快速且灵活地生…...

Java—I/O流

Java的I/O流&#xff08;输入/输出流&#xff09;是用于在程序和外部资源&#xff08;如文件、网络连接等&#xff09;之间进行数据交换的机制。通过I/O流&#xff0c;可以实现从外部资源读取数据&#xff08;输入流&#xff09;或将数据写入外部资源&#xff08;输出流&#x…...

Huginn服务部署

工作中需要使用爬虫系统&#xff0c;做为技术选型需要对Huginn系统进行部署并进行功能验证。下面的文章会记录了Huginn的部署过程&#xff0c;本次部署采用的Ubuntu-23.0.4系统&#xff0c;使用Docker部署。部署过程需要翻墙。 一、安装Docker 删除旧版本 sudo apt-get remo…...

深入解析Java数据包装类型:特性、机制与最佳实践

文章目录 1. 基本概念2. 自动装箱与拆箱3. 缓存机制4. 不可变性5. 常见陷阱与最佳实践a. 空指针异常b. 不要用 比较两个包装类实例c. 高精度计算d. 字符串解析 总结 1. 基本概念 Java提供了每个基本数据类型的包装类&#xff0c;位于java.lang包中。这些包装类允许我们将基本…...

【Java基础入门篇】二、控制语句和递归算法

Java基础入门篇 二、控制语句和递归算法 2.1 switch-case多分支选择语句 switch执行case语句块时&#xff0c;若没有遇到break&#xff0c;则运行下一个case直到遇到break&#xff0c;最后的default表示当没有case与之匹配时&#xff0c;默认执行的内容&#xff0c;代码示例如…...

PostgreSQL WAL日志膨胀处理

作者&#xff1a;Digital Observer&#xff08;施嘉伟&#xff09; Oracle ACE Pro: Database PostgreSQL ACE Partner 11年数据库行业经验&#xff0c;现主要从事数据库服务工作 拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、P…...

用户该怎么管理维护自己的服务器?

管理和维护自己的服务器是确保其长期稳定、高效和安全运行的重要任务。以下是一些关键的服务器管理和维护的步骤和建议&#xff0c;适用于Linux或Windows服务器。 1.定期备份数据 定期备份是防止数据丢失和恢复故障的关键步骤。备份策略应包括&#xff1a; 全量备份&#xff1a…...

【MYSQL数据库相关知识介绍】

MySQL 在我们日常技术中是一个广泛使用的开源关系型数据库管理系统&#xff0c;所以作为测试同学&#xff0c;掌握mysql的相关知识是必不可少的技能之一&#xff0c;所以小编从软件测试的角色出发&#xff0c;来整理一些跟测试相关的知识&#xff0c;希望能够帮助到大家。 一、…...

初窥 HTTP 缓存

引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…...

yolov8的深度学习环境安装(cuda12.4、ubuntu22.04)

目录 一、先安装基础环境包 1.首先给Ubuntu安装Chrome浏览器&#xff08;搜索引擎换成百度即可&#xff09; 2、ubuntu 22.04中文输入法安装 3、安装 terminator 4、安装WPS for Linux 5、安装其它之前需要先安装anaconda 6、安装配置anaconda 7、安装完成anaconda后创建…...

RSA算法和AES算法,哪种更安全

目录 一、RSA (非对称加密算法) 二、AES (对称加密算法) 三、对比总结 四、更安全的选择 五、结合使用&#xff1a;RSA AES RSA 和 AES 是两种不同类型的加密算法&#xff0c;适用于不同的场景&#xff0c;因此它们的安全性不能直接比较&#xff0c;而是取决于具体的应用…...

Vue教程|搭建vue项目|Vue-CLI新版脚手架

一、安装Node环境 安装Node及Npm环境 Node下载地址:Node.js — Run JavaScript EverywhereNode.js is a JavaScript runtime built on Chromes V8 JavaScript engine.https://nodejs.org/en/ 安装完成后,检查安装是否成功,并检查版本,命令如下: node -v npm -v mac@Macd…...

kdump调试分析(适用于麒麟,ubuntu等OS)

1. kdump基本原理 1.1 内核崩溃处理机制 当 Linux 系统内核发生崩溃时,通常会触发 panic,系统停止正常运行。Kdump 在这种情况下: 使用一个备用的内核(称为 crash kernel)来启动最小化的环境。从崩溃的主内核中复制内存内容(转储文件)。将转储文件保存到预定义的存储位…...

企业怎么做网站/营销型网站建设模板

本篇博客主要实现一个自定义的二级联动&#xff0c;说到二级联动举一个简单的例子就理解了二级联动的意思。比如我们网购添加收货地址的时候&#xff0c;我们首先选择省份&#xff0c;然后选择对应省份里的市&#xff0c;我们选择了陕西省&#xff0c;选择市的时候&#xff0c;…...

jsp做网站遇到的问题/百度竞价点击价格公式

1、修改manifest.json中的id 2、修改包名 转载于&#xff1a;https://www.jianshu.com/p/ce4688b9c856...

合肥网站制作建设/营销型网站有哪些功能

文章目录引言I、 上架指南1.1 iOS上架干货汇总1.2 上架相关操作技巧1.3 iOS被拒绝的解决方案汇总1.4 系统框架(API)适配II、 开发基础知识III、渲染3.1 动画3.2 文字/图像处理3.2.1 Quartz2D使用指南IV、 网络与数据存储4.1 数据存储4.2 数据搜索4.3 http/https/dns&#xff08…...

安徽茶叶学会 网站建设/东莞外贸推广公司

使用Cartool工具包分析EEG源成像1 基本要求1.1 EEG预处理 (EEG Pre-processing)1.2 时间过滤 (Temporal Filtering)1.3 下采样&#xff08;降低采样率&#xff09; (Down-Sampling)1.4 电极插值与ICA (Electrode Interpolation and ICA)1.5 空间过滤 (Spatial Filtering)1.6 检…...

jsp网站开发需要哪些技术/今日发生的重大新闻

1、在刷新后保持菜单选中 antd的API中提供了一个defaultSelectedKeys参数 描述&#xff1a;初始选中的菜单项 key 数组 类型&#xff1a; string[] 自己手动实验得知意思就是在数组中填入字符串 例如[‘key’] 默认值为空 在菜单标签中设置 defaultSelectedKeys属性指向this.…...

鞋帽箱包网站建设/推广优化网站排名教程

下载和安装 SDK 首先在 https://dev.windowsphone.com/en-us/downloadsdk 页面下载 WP7SKD。&#xff08;如果地址无效&#xff0c;请到微软网站查找具体下载地址。&#xff09; 你可以选择性的下载 7.1.1 版本的升级包&#xff0c;升级后可以选择项目的 Windows Phone 系统的版…...