課程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 ?=σ(ki?xi?+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 ?=σ(ki?xi?+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?σ(W1T?X+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?σ((W1T?X+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=0k?xi?ki?+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?σ(Wk?1T?σ(...)+bk?1?)+bk?)
    并且將激活函數直接作用于每一層的輸出向量而不是分別作用于每個神經元更加方便。

  2. 網絡每一層之后都需要激活函數。沒有必要制作沒有激活函數的網絡層。
    這是因為激活函數里面的網絡層公式是線性函數。而如果網絡中兩個連續的層之間沒有激活函數,那么它們就是兩個線性函數的組合,這也是一個線性函數。那些。兩個連續的網絡層,如果它們之間沒有激活函數,則等效于一個網絡層。為了使網絡的兩個連續層表達比線性函數更復雜的函數,它們之間必須有一個激活函數。
    正因為如此,激活函數也被稱為非線性的:它在網絡公式中添加了一個非線性成分。

  3. 如果我們正在解決二分類問題,那么神經網絡的最后一層必須具有 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 ni=1n?L(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.pswp.cn/news/896269.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896269.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896269.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue.js Vue 測試工具:Vue Test Utils 與 Jest

Vue.js Vue 測試工具:Vue Test Utils 與 Jest 在 Vue.js 的開發過程中,編寫和執行測試是確保應用質量和穩定性的關鍵步驟。Vue Test Utils 和 Jest 是 Vue.js 官方推薦的測試工具,二者結合使用,可以高效地進行單元測試和集成測試…

數據結構 1-2 線性表的鏈式存儲-鏈表

1 原理 順序表的缺點: 插入和刪除移動大量元素數組的大小不好控制占用一大段連續的存儲空間,造成很多碎片 鏈表規避了上述順序表缺點 邏輯上相鄰的兩個元素在物理位置上不相鄰 頭結點 L:頭指針 頭指針:鏈表中第一個結點的存儲…

各種以太坊Rollup技術

以太坊Rollup技術是一種通過將大量交易批處理并在主鏈上記錄較小的數據摘要來擴展以太坊網絡的方法。Rollup技術主要分為兩種類型:樂觀Rollup(Optimistic Rollup)和零知識Rollup(ZK-Rollup)。下面詳細介紹這兩種技術及…

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制作的啟動盤&#…

回合制游戲文字版(升級)

//在上一篇博客的基礎上,加了細節的改動 //改動:添加了外貌,性別,招式的細節描繪;添加了個人信息展示界面 //一創建java文件1,命名為playGame package test2;import java.util.Random;public class play…

halcon三維點云數據處理(二十五)moments_object_model_3d

目錄 一、moments_object_model_3d例程二、moments_object_model_3d函數三、效果圖一、moments_object_model_3d例程 這個例子說明了如何使用moments_object_model_3d運算符來將3D數據與x、y、z坐標軸對齊。在實際應用中,通過3D傳感器獲取的物體模型可能具有一個與物體主軸不…

一周學會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…

keycloak - 開發環境的配置持久化

keycloak - 開發環境的配置持久化 前情提要&#xff1a; Keycloak - docker 運行 & 前端集成 本來是想順便試一下 Okta 集成的&#xff0c;但是發現 Okta 沒有本地的 docker 鏡像&#xff0c;他們畢竟是做 Identity as a service……算了…… 更新后的 docker compose 如…

項目實戰--網頁五子棋(匹配模塊)(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. 數據庫遷移…

Spring Boot + JSqlParser:全面解析數據隔離最佳實踐

Spring Boot JSqlParser&#xff1a;全面解析數據隔離最佳實踐 在構建多租戶系統或需要進行數據權限控制的應用時&#xff0c;數據隔離是一個至關重要的課題。不同租戶之間的數據隔離不僅能夠確保數據的安全性&#xff0c;還能提高系統的靈活性和可維護性。隨著業務的擴展和需…

51單片機編程學習筆記——點亮LED

大綱 器件51單片機開發板總結 安裝驅動點亮LED燒錄 隨著最近機器人爆火&#xff0c;之前寫的ROS2系列博客《Robot Operating System》也獲得了更多的關注。我決定在機器人領域里再走一步&#xff0c;于是想到可以學習單片機。研究了下學習路徑&#xff0c;最后還是選擇先從51單…

Java String 類

Java String 類常用方法詳解 在 Java 編程里&#xff0c;字符串操作十分常見&#xff0c;而 String 類作為 Java 標準庫的核心類&#xff0c;用于表示不可變的字符序列。任何對字符串的修改操作都會返回一個新的字符串對象&#xff0c;不會改變原始字符串。本文將詳細介紹 Str…

9.【線性代數】—— 線性相關性, 向量空間的基,維數

九 線性相關性&#xff0c; 向量空間的基&#xff0c;維數 Ax0 什么情況下無解(x不為零向量)1. 向量組的線性無關性2.向量組生成一個空間(S)3. 向量空間的一組基&#xff1a;都滿足向量個數相同4. 空間維數 基向量的個數 Ax0 什么情況下無解(x不為零向量) Ax0無解&#xff0c…

藍橋杯單片機組第十二屆省賽第二批次

前言 第十二屆省賽涉及知識點&#xff1a;NE555頻率數據讀取&#xff0c;NE555頻率轉換周期&#xff0c;PCF8591同時測量光敏電阻和電位器的電壓、按鍵長短按判斷。 本試題涉及模塊較少&#xff0c;題目不難&#xff0c;基本上準備充分的都能完整的實現每一個功能&#xff0c;并…