课程1. 深度学习简介
课程1. 深度学习简介
- 神经网络结构
- 逻辑回归
- XOR问题(异或问题)
- 中间特征的生成
- 全连接神经网络
- 中间网络层的激活函数
- Sigmoid函数
- Tanh函数
- ReLU函数
- 其它激活函数
- 使用全连接神经网络解决 XOR 问题
- 神经网络用于回归问题
- 训练神经网络
- 不同类型的神经网络
- 附加材料
- 人工和生物神经元与神经网络的类比
神经网络结构
在本讲座中,我们将了解人工神经网络的结构及其训练原理。
神经元和神经网络的结构可以从两个方面来讨论:
- 将人工神经元视为生物神经元的模型。这种类比并不是很严格,因为虽然人工神经元在概念上与生物神经元相似,但它并不能完全模拟生物神经元。此外,人工神经网络的结构有几个特点,使得它与生物神经网络有很大不同。
- 第二种选择是数学的,更为严格。这里将神经元和整个神经网络视为逻辑回归模型的泛化。通过这种方法,我们就能清楚地知道为什么神经网络的结构是这样的。
在本讲座中,我们将考虑第二种选择。
我们将通过回顾逻辑回归的结构开始从逻辑回归到神经网络的旅程。
逻辑回归
逻辑回归是一种解决二元分类问题的模型。
让我们考虑这个问题:利用有关一个人的信息,确定他是否会在不久的将来患上心血管疾病。让我们下载此任务的训练和测试数据并查看它们:
! pip install wldhx.yadisk-direct
! curl -L $(yadisk-direct https://disk.yandex.com/d/nV8yH0zpMzYQ5g) -o ssz_train.csv
! curl -L $(yadisk-direct https://disk.yandex.com/d/rxee3m6enl80zA) -o ssz_test.csv
输出:
import pandas as pdtrain_data = pd.read_csv('ssz_train.csv')
test_data = pd.read_csv('ssz_test.csv')train_data.head()
输出:
逻辑回归为数据的每个特征分配一个系数。令 k i k_i ki 表示数据集第 i i i 个特征对应的系数。另外,还有一个额外的系数 k 0 k_0 k0,它与任何特征都不对应。它被称为常数。
逻辑回归使用以下公式计算对输入元素 X = ( x 1 , x 2 , x 3 , . . . , x k ) X = (x_1, x_2, x_3, ..., x_k) X=(x1,x2,x3,...,xk) 的响应:
y ^ = σ ( ∑ k i x i + k 0 ) \widehat{y} = \sigma(\sum k_i x_i + k_0) y =σ(∑kixi+k0)
这里 σ \sigma σ 是 S 型激活函数。
它以输入元素属于类 1 的概率的形式给出答案。
对数回归的训练包括寻找参数 k i k_i ki的最优值。
对数回归可以表示如下:
让我们在数据集上训练对数回归。我们将数据分成一个特征和一个目标变量:
y_train = train_data['cardio']
X_train = train_data.drop(columns=['cardio'])y_test = test_data['cardio']
X_test = test_data.drop(columns=['cardio'])
让我们导入训练数据并训练对数回归:
from sklearn.linear_model import LogisticRegressionlr = LogisticRegression()
lr.fit(X_train, y_train)
我们来看看对数回归学习到的系数:
lr.coef_, lr.intercept_
输出:
lr.score(X_test, y_test)
输出:
0.6925833333333333
现在让我们回想一下对数回归的几何意义,并理解逻辑回归是一种相当弱的算法。作为决策规则,对数回归构建了一个线性超平面,将一个类的元素与第二个类的元素分开。当数据集中只有两个特征时,线性超平面是一条直线。
如果我们的数据集只有两个特征,那么数据集元素可以在平面上描绘为点。 X 轴对应第一个特征的值,Y 轴对应第二个特征的值。根据点是属于零类还是一类,它们被染成两种颜色。
现在我们再看一下对数回归公式:
y ^ = σ ( ∑ k i x i + k 0 ) \widehat{y} = \sigma(\sum k_i x_i + k_0) y =σ(∑kixi+k0)
对数回归公式中 S 形函数内部的部分,从几何角度看,反映的是平面上的一条直线。并且在训练期间,对数回归选择这样的系数 k k k,使得该线能够最好地将平面上的两个类别的点分开。
事实上,对数回归表达的是直线,这使得它无法很好地处理那些点不能线性分离的数据。例如,假设我们的数据集中的点排列如下:
无论你在这里画什么线,它都无法很好地区分不同类别的点。在这种情况下,数据被称为线性不可分。
在这种情况下,我们希望我们的模型更加“灵活”:以便它能够表达比直线更复杂的功能。
XOR问题(异或问题)
回想一下,XOR 问题是标准线性回归模型无法分离数据的一个典型例子。它的名字指的是 XOR 函数,通常通过以下关系描述(对于两个二进制变量 x 1 x_1 x1 和 x 2 x_2 x2):
x 1 x_1 x1 | x 2 x_2 x2 | X O R ( x 1 , x 2 ) XOR(x_1, x_2) XOR(x1,x2) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
这样的数据不能线性划分,即不可能构建一条线来分隔 X O R XOR XOR 函数取值 0 的点和 X O R = 1 XOR=1 XOR=1 的点。
然后,让我们尝试将这个问题推广到任意特征,并尝试使用逻辑回归来解决它。
让我们生成数据:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme()
rng = np.random.RandomState(0)# 定义一个由 4 个簇组成的合成点集
X1 = rng.randn(50, 2) + np.array([4,4])
X2 = rng.randn(50, 2) + np.array([-4,4])
X3 = rng.randn(50, 2) + np.array([4,-4])
X4 = rng.randn(50, 2) + np.array([-4,-4])
X = np.concatenate([X1,X2,X3,X4])
y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)
plt.figure(figsize=(15,10))
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.coolwarm);
输出:
让我们尝试建立一个逻辑回归并描述其输出的强度(即根据该模型的预测,某个点属于类“1”的概率)。
def plot_boundary(clf, X, y, plot_title):"""以图形方式显示线性模型的输出强度的函数"""x_mesh, y_mesh = np.meshgrid(np.linspace(-8, 8, 50), np.linspace(-8, 8, 50))clf.fit(X, y)Z = clf.predict_proba(np.vstack((x_mesh.ravel(), y_mesh.ravel())).T)[:, 1]Z = Z.reshape(x_mesh.shape)b1 = x_mesh.min()b2 = x_mesh.max()b3 = y_mesh.min()b4 = y_mesh.max()image = plt.imshow(Z, interpolation='nearest', extent=(b1, b2, b3, b4), aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)contours = plt.contour(x_mesh, y_mesh, Z, levels=[0], linewidths=2, linetypes='--');plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.coolwarm)plt.xticks(())plt.yticks(())plt.axis([-8, 8, -8, 8])plt.colorbar(image)plt.title(plot_title, fontsize=20);
from sklearn.linear_model import LogisticRegressionplt.figure(figsize=(15,10))
plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")
输出:
中间特征的生成
让我们思考如何解决这个问题:如何使对数回归算法更加灵活,能够适应数据中更复杂的依赖关系。
现在我们接收传入元素的响应的管道(算法)如下所示:我们将数据集元素的特征输入到模型的输入中,并使用公式得到答案。
让我们这样做:在将特征提供给模型输入之前,让我们尝试修改这些特征,使它们变得线性可分离。让我们通过某些函数运行它们,以便数据集元素的特征值以这样一种方式发生变化,即平面上的点变得可以使用直线分离,即使用对数回归。
事实证明,对于某些类型的特征,可以选择函数,使得应用这些函数后,变换后的特征实际上变得可以很好地分离。这样的函数被称为核,而使用核来变换特征被称为核技巧。通常,核将特征转换到更高维的空间,也就是说,它们增加了数据集中的特征数量。例如,从两个符号可以得到三个。
由于这样的操作,当有两个特征时,那些最初在平面上不可分离的元素,现在当有三个特征时,在空间中变得线性可分离。
然而,内核是固定函数。在某些情况下它们效果很好,但在其他情况下效果不佳。但是不可能选择某个固定的“通用”内核来始终使得数据集的元素线性可分。因此,我想提出一些更灵活、更通用的方法来转换特征,以便无论数据集如何,都可以使元素线性可分离。
这个想法是这样的:如果特征的转换也是可训练的会怎样?创建一些类似的机器学习模型,其目的是将元素的特征作为输入,并基于这些特征输出该元素的新特征。通过对数回归已经可以很好地划分样本。也就是说,这些将是这样的学习核心。
全连接神经网络
因此,我们得到了以下设计:
这就是我们从改进对数回归模型的思路中得到了一个具有任意数量隐藏层的全连接神经网络。
矩阵形式的公式:
y ^ = σ ( W 3 σ ( W 2 T σ ( W 1 T X + b 1 ) + b 2 ) + b 3 ) \widehat{y} = \sigma(W_3 \sigma(W_2^T \sigma(W_1^TX + b_1 ) + b_{2}) + b_{3}) y =σ(W3σ(W2Tσ(W1TX+b1)+b2)+b3)
一般情况下,当网络中有 k k k 层时:
y ^ = σ ( W k T σ ( W k − 1 T σ ( … ( W 1 T X + b 1 ) … ) + b k − 1 ) + b k ) \widehat{y} = \sigma(W_k^T \sigma(W_{k-1}^T \sigma(\dots(W_1^T X + b_1) … ) + b_{k-1}) + b_{k}) y =σ(WkTσ(Wk−1Tσ(…(W1TX+b1)…)+bk−1)+bk)
为某项任务训练这样的神经网络的过程包括寻找所有对数回归的所有参数的最优值。所有对数回归都是联合训练的。它们的权重相互调整,使得整个最终模型能够很好地解决任务。
还值得一提的是,通常直到最后一层的整个网络部分被称为特征提取器,而最后一层被称为分类器。这与我们从逻辑回归构建完全连接网络的方式一致:网络的最后一层实际上是对数回归本身,所有其他层都是特征转换器,用于将它们馈送到最后一个对数回归层的输入。
在我们了解神经网络权重究竟是如何训练之前,我们先来关注以下两件事:
中间网络层的激活函数
因此,我们知道神经网络是由通过权重相互连接的多层神经元组成的。每个神经元都表达一种功能
σ ( ∑ i = 0 k x i k i + k 0 ) \sigma \left( \sum_{i=0}^{k} x_ik_i + k_0 \right) σ(i=0∑kxiki+k0)
神经元的 σ \sigma σ函数称为神经元的激活函数。在我们的神经网络中, σ \sigma σ 是一个 S 型函数,就像逻辑回归一样。但是全连接神经网络中的神经元可以有不同的激活函数,而不仅仅是S形。在本节中,我们将介绍一些实践中常用的激活函数。
但在此之前,需要注意以下有关激活函数的问题:
-
网络某一层的所有神经元都使用相同的激活函数。这是由于神经网络根据输入的输出是以矩阵形式计算的:
y ^ = σ ( W k T σ ( W k − 1 T σ ( . . . ) + b k − 1 ) + b k ) \widehat{y} = \sigma(W_k^T \sigma(W_{k-1}^T \sigma(... ) + b_{k-1}) + b_{k}) y =σ(WkTσ(Wk−1Tσ(...)+bk−1)+bk)
并且将激活函数直接作用于每一层的输出向量而不是分别作用于每个神经元更加方便。 -
网络每一层之后都需要激活函数。没有必要制作没有激活函数的网络层。
这是因为激活函数里面的网络层公式是线性函数。而如果网络中两个连续的层之间没有激活函数,那么它们就是两个线性函数的组合,这也是一个线性函数。那些。两个连续的网络层,如果它们之间没有激活函数,则等效于一个网络层。为了使网络的两个连续层表达比线性函数更复杂的函数,它们之间必须有一个激活函数。
正因为如此,激活函数也被称为非线性的:它在网络公式中添加了一个非线性成分。 -
如果我们正在解决二分类问题,那么神经网络的最后一层必须具有 S 型激活函数(因为事实上,最后一层是对数回归,它解决了二分类问题)。并且在网络的隐藏层中可能已经存在其他激活函数。
现在让我们看一下完全连接神经网络的隐藏层中使用的一些流行的激活函数。
Sigmoid函数
在我们得到的神经网络模型中,S 型函数被用作中间层的激活函数:
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1
其图形及其导数的图形:
这是因为我们根据逻辑回归构建了神经网络。然而,对于神经网络的隐藏层来说,这种激活函数的选择并不是最佳的。这是由于 S 形导数的性质所致。正如我们稍后会看到的,衍生品在训练神经网络中起着关键作用。您可以在此处阅读有关 S 型函数作为激活函数的缺点的更多信息。
用什么来代替 S 形?激活函数有很多种类型,可用于不同的神经网络。其中最受欢迎的是:
Tanh函数
切线激活函数已经取代了 S 形函数,并且长期以来一直被用作网络隐藏层的通用激活函数。但是它也存在很大的缺点,其中很多缺点与 S 型函数的性质相同。
ReLU函数
ReLU是如今可以称得上“万能”的一个激活函数。大多数情况下它效果很好。它没有sigmoid和tanh的缺点,而且它和它的导数计算起来要容易得多。
默认情况下,神经网络隐藏层应该使用的函数是ReLU。
其它激活函数
除了 sigmoid、tanh、ReLU 之外,还有其他激活函数。例如,Leaky ReLu、ELU(ReLU 的修改)、Swish 等。其中许多有助于解决某些问题。您可以阅读其中一些内容 这里。
使用全连接神经网络解决 XOR 问题
现在让我们尝试使用完全连接的神经网络来解决 XOR 问题。让我们使用 ReLU 激活函数构建一个具有一个隐藏层和三个神经元的网络:
from sklearn.neural_network import MLPClassifiermlp = MLPClassifier(hidden_layer_sizes=(3,), activation='relu', solver='sgd', max_iter=5000, random_state=42)
mlp.fit(X, y)
输出:
plt.figure(figsize=(15,10))
plot_boundary(mlp, X, y,
"XOR problem solution")
输出:
mlp.coefs_, mlp.intercepts_
输出:
神经网络用于回归问题
到目前为止,我们一直在讨论二元词汇分类问题。我们根据对数回归建立了一个神经网络,这是一个二元分类问题的模型。但是,当然,借助神经网络,不仅可以解决这个问题,还可以解决其他问题。
经典机器学习中众所周知的问题包括:
- 回归问题
- 多类分类问题
为了使完全连接的神经网络适应回归问题,您只需将最后一层的逻辑回归替换为线性回归。也就是说,从最后一层的神经元中去除激活函数。请注意,激活函数必须保留在网络的所有隐藏层中!
下一课我们将讨论多类分类的问题。
训练神经网络
训练神经网络包括为特定任务寻找网络参数的最优值。
这是什么意思:假设我们有一个数据集。让我们以上面使用的 CVD 数据集为例。
train_data.head()
输出:
假设我们选择了一个损失函数 L L L,并希望将其在数据上最小化。
那么网络训练的任务就是找到这样的网络参数 W 1 , b 1 , W 2 , b 2 , … W_1, b_1, W_2, b_2, \dots W1,b1,W2,b2,…,使得损失函数在训练数据集元素上的平均值最小: ∑ i = 1 n L ( y i , y ^ i ) n → m i n \frac{\sum_{i=1}^n L(y_i, \widehat{y}_i)}{n} \to min n∑i=1nL(yi,y i)→min
,其中 n n n是数据中的元素数量, y i y_i yi是第 i i i个数据元素的目标变量的正确值, y ^ i \widehat{y}_i y i是第 i i i个数据元素的模型响应。
神经网络权重的训练是使用梯度下降算法完成的。在本课中,我们不会详细介绍该算法的结构。
不同类型的神经网络
在本课中,我们了解了全连接神经网络的结构。这是开启深度学习历史的经典神经装置。但近年来,人们发明了其他神经网络架构,非常适合解决各种类型的问题。我们将在本课程的课堂上了解其中的一些。然而,值得注意的是,所有其他神经网络架构都是基于与全连接神经网络相同的思想。
一些类型的神经网络:
1)完全连接的神经网络。这些正是我们在今天的讲座中讨论的模型;
2)卷积神经网络。该架构旨在更有效地处理图像;
3)循环神经网络。该架构旨在更有效地处理以序列表示的数据;
4)基于注意力机制的 Transformer。该架构最初是为了机器翻译任务而设计的,其背后的理念已被证明在从图像处理到文本和声音等各种任务中非常有效;
5)图神经网络。这种类型的神经网络在处理具有图形性质的数据时效果很好。例如社交网络图/物质分子等。
附加材料
人工和生物神经元与神经网络的类比
在这里我们将尝试展示如何在人工和生物神经元与神经网络之间进行类比。
首先,让我们概括地描述一下生物神经网络和大脑中单个神经元的结构。让我在这里澄清一下:我对生物过程的描述并不声称是完整和严谨的;我将在非常抽象、意识形态的层面上描述它们。
所以,我们的大脑由数十亿个通过网络相互连接的神经元组成。神经元之间的连接称为突触:信息通过它们传输。神经元彼此之间的连接相当混乱;连接中没有特殊的结构。此外,神经元之间会出现新的连接,而旧的连接则会消失。
每个神经元从一组神经元接收信息并将其传输给另一组神经元。大脑中的信息以电脉冲的形式呈现,因此当神经元接收和传输信息时,电流就会通过它并“亮起来”。
此外,神经元之间的突触具有不同的阻力。连接中的电阻大小决定了从一个神经元流向另一个神经元的电流量。如果阻力很大,第一个神经元释放的冲动只有一小部分能够到达第二个神经元。如果电阻较低,那么几乎整个脉冲都会顺利通过连接。因此,电阻的大小可以被认为是信号的重要性:来自第一个神经元的信号对于第二个神经元有多重要。
这就是大脑神经元之间信息传递过程的一般运作方式。
现在让我们更详细地讨论单个生物神经元的结构。一般来说,一个神经元有三个组成部分:树突、轴突和膜。
树突是神经元的输入,神经元通过它接收来自大脑中其他神经元的信息。
在膜和细胞质中,通过树突接收的信息被处理:来自其他神经元的所有冲动被加起来,并将总和与某个阈值进行比较。如果总和大于阈值,则神经元被激活,并且信息进一步传输到其他神经元。如果总和小于阈值,则认为接收到的信息无关紧要,神经元不会被激活,也不会沿着网络进一步传输信息。也就是说,冲动逐渐消失。
神经元的最后一个元素是轴突。轴突通过突触与其他神经元的树突相连。正是通过这条通路,一个神经元中积累的信息被传输到下一个神经元。嗯,如果发生了激活,当然可以。
这大致就是生物神经元的结构。现在让我们根据人工神经元的结构建立一个模型。
圆圈是膜,左边的边缘是突触,来自其他神经元(用灰色圆圈表示)的信息通过突触进入细胞核。右侧的边缘是突触,它将信息传递到网络中其他的神经元。
在计算机中,所有信息都以数字表示。因此,我们的人工神经元将以数字的形式接收和传输信息,而不是像生物神经网络那样以电脉冲的形式。
人工神经元如何处理信息:看,我们的神经元与其他五个神经元相连,它从三个神经元接收信息并将信息传递给两个神经元。让三个传入的神经元向我们的绿色神经元的输入发送大小为十、七和三的脉冲。神经元之间的每个边都有一个权重——某个实数。当来自神经元的信号沿着边缘传递时,该信号会乘以边缘的权重。也就是说,三个信号将到达我们的绿色神经元:十乘以零五、七乘以一和三乘以零一。人工神经元中的边缘权重类似于生物神经网络中神经元之间连接的阻力。然后,在核心内部,这些信号被加在一起形成一个信号:在我们的例子中,它是十二点三。然后将该信号与阈值进行比较。让神经元中的阈值为十。
我们看到,这种人工神经元模型类似于逻辑回归和我们在课堂上讨论的人工神经元。唯一的区别是激活函数。在人工中子网络中,它不是一个阈值。
这就是人们如何将生物和人工神经元与神经网络进行类比。然而,这种类比并不能解释为什么在人工神经网络中神经元被组合成层,并且连接只存在于连续层的神经元之间。但在笔记本电脑的主要部分,幸运的是,我们已经弄清楚了为什么人工网络以这种方式构建。
相关文章:

课程1. 深度学习简介
课程1. 深度学习简介 神经网络结构逻辑回归XOR问题(异或问题) 中间特征的生成全连接神经网络中间网络层的激活函数Sigmoid函数Tanh函数ReLU函数其它激活函数 使用全连接神经网络解决 XOR 问题神经网络用于回归问题训练神经网络 不同类型的神经网络 附加材…...

【cuda学习日记】4.3 结构体数组与数组结构体
4.3 数组结构体(AoS)和结构体数组(SoA) AoS方法进行存储 struct innerStruct{float x;float y; };struct innerStruct myAOS[N];SoA方法来存储数据 struct innerArray{float x[N];float y[N]; };struct innerArray moa;如图说明…...

2025最新高维多目标优化:基于城市场景下无人机三维路径规划的导航变量的多目标粒子群优化算法(NMOPSO),MATLAB代码
一、基于导航变量的多目标粒子群优化算法(NMOPSO)介绍 基于导航变量的多目标粒子群优化算法(Navigation variable-based multi-objective particle swarm optimization,NMOPSO)是2025年提出的一种用于无人机路径规划的…...

数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例
数字IC后端时钟树综合专题(OCC电路案例分享) 复杂时钟设计时钟树综合(clock tree synthesis)常见20个典型案例 1、什么是OCC? 片上时钟控制器(On-chip Clock Controllers ,OCC),也称为扫描时钟控制器(Scan Clock Con…...

Linux内核,slub分配流程
我们根据上面的流程图,依次看下slub是如何分配的 首先从kmem_cache_cpu中分配,如果没有则从kmem_cache_cpu的partial链表分配,如果还没有则从kmem_cache_node中分配,如果kmem_cache_node中也没有,则需要向伙伴系统申请…...

本地部署DeepSeek-R1(Ollama+Docker+OpenWebUI知识库)
安装Ollama 打开 Ollama官网 https://ollama.com/下载安装 Ollama服务默认只允许本机访问,修改允许其它主机访问 OLLAMA_HOST0.0.0.0 ollama serve也可以添加系统环境变量 都知道模型体积很大,顺便也通过环境变量修改模型存放位置,我这…...
Java 实现快速排序算法:一条快速通道,分而治之
大家好,今天我们来聊聊快速排序(QuickSort)算法,这个经典的排序算法被广泛应用于各种需要高效排序的场景。作为一种分治法(Divide and Conquer)算法,快速排序的效率在平均情况下非常高ÿ…...

20250223下载并制作RTX2080Ti显卡的显存的测试工具mats
20250223下载并制作RTX2080Ti显卡的显存的测试工具mats 2025/2/23 23:23 缘起:我使用X99的主板,使用二手的RTX2080Ti显卡【显存22GB版本,准备学习AI的】 但是半年后发现看大码率的视频容易花屏,最初以为是WIN10经常更换显卡/来回更…...

element-ui的组件使用
1. 安装 Element UI(在文件夹最上面输入cmd进入dos窗口,然后输入安装指令 npm install element-ui --save) 2.在main.js文件全局引入(main.js文件负责 全局注册 ),在该文件注册的所有组件在其他文件都能直接调用,一般…...

医疗AI领域中GPU集群训练的关键技术与实践经验探究(上)
医疗AI领域中GPU集群训练的关键技术与实践经验探究(上) 一、引言 1.1 研究背景与意义 在科技飞速发展的当下,医疗 AI 作为人工智能技术与医疗领域深度融合的产物,正引领着医疗行业的深刻变革。近年来,医疗 AI 在疾病诊断、药物研发、健康管理等诸多方面取得了显著进展,…...
详解Redis淘汰策略
引言 Redis 是一个高性能的内存数据库,广泛应用于缓存系统、消息队列等场景。当 Redis 的内存达到限制时,需要根据一定的策略来淘汰数据,以便腾出空间给新数据。本文将深入解析 Redis 的内存淘汰机制,帮助更好地配置 Redis&#…...

HarmonyOS 5.0应用开发——鸿蒙接入高德地图实现POI搜索
【高心星出品】 文章目录 鸿蒙接入高德地图实现POI搜索运行结果:准备地图编写ArkUI布局来加载HTML地图 鸿蒙接入高德地图实现POI搜索 在当今数字化时代,地图应用已成为移动设备中不可或缺的一部分。随着鸿蒙系统的日益普及,如何在鸿蒙应用中…...

nginx关于配置SSL后启动失败原因分析
在配置SSL后,启动./nginx失败,报错提示如下: nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx-1.27.4/conf/nginx.conf:36 这个错误提示表在配置nginx启用SSL时,nginx未启用 ng…...

【自学嵌入式(9)ESP8266网络服务器的使用】
ESP8266网络服务器的使用 ESP8266WiFi 库① WiFiClass② WiFiClient③ WiFiServer④ WiFiUDP ESP8266WiFiMulti 库① WiFiMulti ESP8266WebServer 库① ESP8266WebServer 网络服务器实例在浏览器中控制ESP8266指示灯将开发板引脚状态显示在网页中 在之前的文章中,曾…...

危化品经营单位安全管理人员的职责及注意事项
危化品经营单位安全管理人员肩负着保障经营活动安全的重要责任,以下是其主要职责及注意事项: 职责 1. 安全制度建设与执行:负责组织制定本单位安全生产规章制度、操作规程和生产安全事故应急救援预案,确保这些制度符合国家相关法…...
项目实战--网页五子棋(匹配模块)(5)
上期我们实现了websocket后端的大部分代码,这期我们实现具体的匹配逻辑 1. 定义Mather类 我们新建一个Matcher类用来实现匹配逻辑 Component public class Matcher {//每个匹配队列代表不同的段位,这里约定每一千分为一个段位private ArrayList<Queue<User…...

mysql 迁移到人大金仓数据库
我是在windows上安装了客户端工具 运行数据库迁移工具 打开 在浏览器输入http://localhost:54523/ 账号密码都是kingbase 添加mysql源数据库连接 添加人大金仓目标数据库 添加好的两个数据库连接 新建迁移任务 选择数据库 全选 迁移中 如果整体迁移不过去可以单个单个或者几个…...

uniapp 网络请求封装(uni.request 与 uView-Plus)
一、背景 在开发项目中,需要经常与后端服务器进行交互;为了提高开发效率和代码维护性,以及降低重复性代码,便对网络请求进行封装统一管理。 二、创建环境文件 2.1、根目录新建utils文件夹,utils文件夹内新建env.js文…...
计算机网络与通讯知识总结
计算机网络与通讯知识总结 基础知识总结 1)FTP:文件传输 SSH:远程登录 HTTP:网址访问 2)交换机 定义:一种基于MAC地址实现局域网(LAN)内数据高速转发的网络设备,可为接入设备提供独享通信通道。 - 核心功能: 1.数据链路层(OSI第二层)工作,通过MAC地址…...

DPVS-2:单臂负载均衡测试
上一篇编译安装了DPVS,这一篇开启DPVS的负载均衡测试 : 单臂 FULL NAT模式 拓扑-单臂 单臂模式 DPVS 单独物理机 CLINET,和两个RS都是另一个物理机的虚拟机,它们网卡都绑定在一个桥上br0 , 二层互通。 启动DPVS …...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...