永嘉网站优化/交换链接营销实现方式解读

永嘉网站优化,交换链接营销实现方式解读,做fitting网站,东莞手机app开发课程1. 深度学习简介 神经网络结构逻辑回归XOR问题(异或问题) 中间特征的生成全连接神经网络中间网络层的激活函数Sigmoid函数Tanh函数ReLU函数其它激活函数 使用全连接神经网络解决 XOR 问题神经网络用于回归问题训练神经网络 不同类型的神经网络 附加材…

课程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)
000
011
101
110

这样的数据不能线性划分,即不可能构建一条线来分隔 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σ(Wk1Tσ((W1TX+b1))+bk1)+bk)

为某项任务训练这样的神经网络的过程包括寻找所有对数回归的所有参数的最优值。所有对数回归都是联合训练的。它们的权重相互调整,使得整个最终模型能够很好地解决任务。

还值得一提的是,通常直到最后一层的整个网络部分被称为特征提取器,而最后一层被称为分类器。这与我们从逻辑回归构建完全连接网络的方式一致:网络的最后一层实际上是对数回归本身,所有其他层都是特征转换器,用于将它们馈送到最后一个对数回归层的输入。
在这里插入图片描述
在我们了解神经网络权重究竟是如何训练之前,我们先来关注以下两件事:

中间网络层的激活函数

因此,我们知道神经网络是由通过权重相互连接的多层神经元组成的。每个神经元都表达一种功能

σ ( ∑ i = 0 k x i k i + k 0 ) \sigma \left( \sum_{i=0}^{k} x_ik_i + k_0 \right) σ(i=0kxiki+k0)

在这里插入图片描述
神经元的 σ \sigma σ函数称为神经元的激活函数。在我们的神经网络中, σ \sigma σ 是一个 S 型函数,就像逻辑回归一样。但是全连接神经网络中的神经元可以有不同的激活函数,而不仅仅是S形。在本节中,我们将介绍一些实践中常用的激活函数。

但在此之前,需要注意以下有关激活函数的问题:

  1. 网络某一层的所有神经元都使用相同的激活函数。这是由于神经网络根据输入的输出是以矩阵形式计算的:
    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σ(Wk1Tσ(...)+bk1)+bk)
    并且将激活函数直接作用于每一层的输出向量而不是分别作用于每个神经元更加方便。

  2. 网络每一层之后都需要激活函数。没有必要制作没有激活函数的网络层。
    这是因为激活函数里面的网络层公式是线性函数。而如果网络中两个连续的层之间没有激活函数,那么它们就是两个线性函数的组合,这也是一个线性函数。那些。两个连续的网络层,如果它们之间没有激活函数,则等效于一个网络层。为了使网络的两个连续层表达比线性函数更复杂的函数,它们之间必须有一个激活函数。
    正因为如此,激活函数也被称为非线性的:它在网络公式中添加了一个非线性成分。

  3. 如果我们正在解决二分类问题,那么神经网络的最后一层必须具有 S 型激活函数(因为事实上,最后一层是对数回归,它解决了二分类问题)。并且在网络的隐藏层中可能已经存在其他激活函数。

现在让我们看一下完全连接神经网络的隐藏层中使用的一些流行的激活函数。

Sigmoid函数

在我们得到的神经网络模型中,S 型函数被用作中间层的激活函数:

σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1

其图形及其导数的图形:
在这里插入图片描述
这是因为我们根据逻辑回归构建了神经网络。然而,对于神经网络的隐藏层来说,这种激活函数的选择并不是最佳的。这是由于 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 ni=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)图神经网络。这种类型的神经网络在处理具有图形性质的数据时效果很好。例如社交网络图/物质分子等。

附加材料

人工和生物神经元与神经网络的类比

在这里我们将尝试展示如何在人工和生物神经元与神经网络之间进行类比。

首先,让我们概括地描述一下生物神经网络和大脑中单个神经元的结构。让我在这里澄清一下:我对生物过程的描述并不声称是完整和严谨的;我将在非常抽象、意识形态的层面上描述它们。

所以,我们的大脑由数十亿个通过网络相互连接的神经元组成。神经元之间的连接称为突触:信息通过它们传输。神经元彼此之间的连接相当混乱;连接中没有特殊的结构。此外,神经元之间会出现新的连接,而旧的连接则会消失。

每个神经元从一组神经元接收信息并将其传输给另一组神经元。大脑中的信息以电脉冲的形式呈现,因此当神经元接收和传输信息时,电流就会通过它并“亮起来”。

此外,神经元之间的突触具有不同的阻力。连接中的电阻大小决定了从一个神经元流向另一个神经元的电流量。如果阻力很大,第一个神经元释放的冲动只有一小部分能够到达第二个神经元。如果电阻较低,那么几乎整个脉冲都会顺利通过连接。因此,电阻的大小可以被认为是信号的重要性:来自第一个神经元的信号对于第二个神经元有多重要。

这就是大脑神经元之间信息传递过程的一般运作方式。
在这里插入图片描述
现在让我们更详细地讨论单个生物神经元的结构。一般来说,一个神经元有三个组成部分:树突、轴突和膜
在这里插入图片描述

树突是神经元的输入,神经元通过它接收来自大脑中其他神经元的信息。

膜和细胞质中,通过树突接收的信息被处理:来自其他神经元的所有冲动被加起来,并将总和与某个阈值进行比较。如果总和大于阈值,则神经元被激活,并且信息进一步传输到其他神经元。如果总和小于阈值,则认为接收到的信息无关紧要,神经元不会被激活,也不会沿着网络进一步传输信息。也就是说,冲动逐渐消失。

神经元的最后一个元素是轴突。轴突通过突触与其他神经元的树突相连。正是通过这条通路,一个神经元中积累的信息被传输到下一个神经元。嗯,如果发生了激活,当然可以。

这大致就是生物神经元的结构。现在让我们根据人工神经元的结构建立一个模型。
在这里插入图片描述
圆圈是膜,左边的边缘是突触,来自其他神经元(用灰色圆圈表示)的信息通过突触进入细胞核。右侧的边缘是突触,它将信息传递到网络中其他的神经元。
在计算机中,所有信息都以数字表示。因此,我们的人工神经元将以数字的形式接收和传输信息,而不是像生物神经网络那样以电脉冲的形式。

人工神经元如何处理信息:看,我们的神经元与其他五个神经元相连,它从三个神经元接收信息并将信息传递给两个神经元。让三个传入的神经元向我们的绿色神经元的输入发送大小为十、七和三的脉冲。神经元之间的每个边都有一个权重——某个实数。当来自神经元的信号沿着边缘传递时,该信号会乘以边缘的权重。也就是说,三个信号将到达我们的绿色神经元:十乘以零五、七乘以一和三乘以零一。人工神经元中的边缘权重类似于生物神经网络中神经元之间连接的阻力。然后,在核心内部,这些信号被加在一起形成一个信号:在我们的例子中,它是十二点三。然后将该信号与阈值进行比较。让神经元中的阈值为十。

我们看到,这种人工神经元模型类似于逻辑回归和我们在课堂上讨论的人工神经元。唯一的区别是激活函数。在人工中子网络中,它不是一个阈值。

这就是人们如何将生物和人工神经元与神经网络进行类比。然而,这种类比并不能解释为什么在人工神经网络中神经元被组合成层,并且连接只存在于连续层的神经元之间。但在笔记本电脑的主要部分,幸运的是,我们已经弄清楚了为什么人工网络以这种方式构建。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 1-2 线性表的链式存储-链表

1 原理 顺序表的缺点: 插入和删除移动大量元素数组的大小不好控制占用一大段连续的存储空间,造成很多碎片 链表规避了上述顺序表缺点 逻辑上相邻的两个元素在物理位置上不相邻 头结点 L:头指针 头指针:链表中第一个结点的存储…

Kubernetes开发环境minikube | 开发部署MySQL单节点应用

minikube是一个主要用于开发与测试Kubernetes应用的运行环境 本文主要描述在minikube运行环境中部署MySQL单节点应用 minikube start --force kubectl get nodes 如上所示,启动minikube单节点运行环境 minikube ssh docker pull 如上所示,从MySQL官…

DeepSeek 助力 Vue 开发:打造丝滑的二维码生成(QR Code)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

一文详解U盘启动UEFI/Legacy方式以及GPT/MBR关系

对于装系统的老手而说一直想研究一下装系统的原理,以及面对一些问题时的解决思路,故对以前的方法进行原理上的解释,主要想理解其底层原理。 引导模式 MBR分区可以同时支持UEFI和Legacy引导,我们可以看一下微pe制作的启动盘&#…

一周学会Flask3 Python Web开发-flask3上下文全局变量session,g和current_app

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili flask3提供了session,g和current_app上下文全局变量来方便我们操作访问数据。 以下是一个表格,用于比较Flask中的…

antv G6绘制流程图

效果图&#xff08;优点&#xff1a;可以自定义每一条折线的颜色&#xff0c;可以自定义节点的颜色&#xff0c;以及折线的计算样式等&#xff09;&#xff1a; 代码&#xff1a; <!-- 流程图组件 --> <template><div id"container"></div>…

DeepSeek-R1本地部署保姆级教程

一、DeepSeek-R1本地部署配置要求 &#xff08;一&#xff09;轻量级模型 ▌DeepSeek-R1-1.5B 内存容量&#xff1a;≥8GB 显卡需求&#xff1a;支持CPU推理&#xff08;无需独立GPU&#xff09; 适用场景&#xff1a;本地环境验证测试/Ollama集成调试 &#xff08;二&a…

2025-spring boot 之多数据源管理

1、是使用Spring提供的AbstractRoutingDataSource抽象类 注入多个数据源。 创建 DataSourceConfig 配置类 通过spring jdbc 提供的带路由的抽象数据源 AbstractRoutingDataSource import org.springframework.beans.factory.annotation.Autowired; import org.springframew…

项目实战--网页五子棋(匹配模块)(4)

上期我们完成了游戏大厅的前端部分内容&#xff0c;今天我们实现后端部分内容 1. 维护在线用户 在用户登录成功后&#xff0c;我们可以维护好用户的websocket会话&#xff0c;把用户表示为在线状态&#xff0c;方便获取到用户的websocket会话 package org.ting.j20250110_g…

第4章 4.4 EF Core数据库迁移 Add-Migration UpDate-Database

4.4.1 数据库迁移原理 总结一下就是&#xff1a; 1. 数据库迁移命令的执行&#xff0c;其实就是生成在数据库执行的脚本代码&#xff08;两个文件&#xff1a;数字_迁移名.cs 数字_迁移名.Designer.cs&#xff09;&#xff0c;用于对数据库进行定义和修饰。 2. 数据库迁移…

51单片机编程学习笔记——点亮LED

大纲 器件51单片机开发板总结 安装驱动点亮LED烧录 随着最近机器人爆火&#xff0c;之前写的ROS2系列博客《Robot Operating System》也获得了更多的关注。我决定在机器人领域里再走一步&#xff0c;于是想到可以学习单片机。研究了下学习路径&#xff0c;最后还是选择先从51单…

蓝桥杯单片机组第十二届省赛第二批次

前言 第十二届省赛涉及知识点&#xff1a;NE555频率数据读取&#xff0c;NE555频率转换周期&#xff0c;PCF8591同时测量光敏电阻和电位器的电压、按键长短按判断。 本试题涉及模块较少&#xff0c;题目不难&#xff0c;基本上准备充分的都能完整的实现每一个功能&#xff0c;并…

opencv:距离变换 cv2.distanceTransform

函数 cv2.distanceTransform() 用于计算图像中每一个非零点像素与其最近的零点像素之间的距离&#xff08;Distance Transform&#xff0c; DT算法&#xff09;,输出的是保存每一个非零点与最近零点的距离信息&#xff1b;图像上越亮的点&#xff0c;代表了离零点的距离越远。 …

基于Spring Boot的党员学习交流平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

自动驾驶两个传感器之间的坐标系转换

有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car&#xff0c;需要转换到相机坐标系下&#xff0c;旋转矩阵R_car2Cam&#xff0c;平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1&#xff1a;先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…

数字IC后端培训教程| 芯片后端实战项目中base layer drc violation解析

今天分享一个咱们社区IC后端训练营学员遇到的一个经典DRC案例。这个DRC Violation的名字为PP.S.9(这里的PP就是Plus P)。这一层是属于管子的base layer。更多关于base layer的介绍&#xff0c;可以查看下面这份教程。 https://alidocs.dingtalk.com/api/doc/transit?spaceId5…

2025年校园网络招聘会汇总

1、卫生健康行业2025届毕业生春季校园网络招聘会 企业数量职位数量岗位数量10020002000 访问地址&#xff1a; https://www.weirenjob.com/zph/zph_wsjkxy2025jbyscjxywlzph/ 2、山东地区面向2025届高校毕业生网络招聘活动 企业数量职位数量岗位数量909271052434 访问地址&a…

Windows 10 GPU STACK 0.5.1 安装

Windows 10 GPU STACK 0.5.1 安装 1 GPUStack 安装1.Python安装&#xff08;3.10/11/12&#xff09;2.GPUStack 下载3.生成密码4.访问5.设置模型下载目录6.禁用开机自启并重启服务7.安装模型8.查看安装的进度 2.试验场聊天测试1.对话模式 3.API Key 测试 1 GPUStack 安装 1.Py…

中国工业互联网研究院:人工智能大模型年度发展趋势报告

当前&#xff0c;以大模型为代表的人工智能正快速演进&#xff0c;激发全球科技之变、产业之变、时代之变&#xff0c;人工智能发展迎来新高潮。随着大模型推理、多模态生成、智能体等创新技术的发展&#xff0c;大模型赋能千行百业将进一步提速。中国工业互联网研究院全方位剖…

【cv】vs2022配置opencv

release下配置包含目录和库目录 E:\sdk\sdk_cuda12.3\opencv490\include E:\sdk\sdk_cuda12.3\opencv490\include\opencv2 E:\sdk\sdk_cuda12.3\opencv490\lib release下配置包含链接器输入的依附依赖项 opencv_world490.lib release编译文件夹下需手动复制opencv_world49…