人工智能-python-深度學習-參數初始化與損失函數

文章目錄

  • 參數初始化與損失函數
    • 一、參數初始化
      • 1. 固定值初始化
        • 1.1 全零初始化
        • 1.2 全1初始化
        • 1.3 任意常數初始化
      • 2. 隨機初始化
        • 2.1 均勻分布初始化
        • 2.2 正態分布初始化
      • 3. Xavier初始化
      • 4. He初始化
      • 5. 總結
    • 二、損失函數
      • 1. 線性回歸損失函數
        • 1.1 MAE(Mean Absolute Error)損失
        • 1.2 MSE(Mean Squared Error)損失
      • 2. CrossEntropyLoss(交叉熵損失)
        • 2.1 信息量、信息熵、KL散度
        • 2.2 交叉熵損失(CrossEntropyLoss)
      • 3. BCELoss(二元交叉熵損失)
      • 4. 總結


參數初始化與損失函數

一、參數初始化

在神經網絡中,參數初始化對于模型的訓練效果至關重要。合理的初始化可以加速訓練,避免梯度消失或梯度爆炸問題,甚至影響最終模型的性能。常見的初始化方法如下:
官方文檔參考:Pytorch

1. 固定值初始化

固定值初始化是指在神經網絡訓練開始時,將所有權重或偏置初始化為一個特定的常數值。這種初始化方法雖然簡單,但在實際深度學習應用中并不推薦。

1.1 全零初始化
import torch
import torch.nn as nn# 創建全零初始化的權重
layer = nn.Linear(in_features=10, out_features=5)
torch.zeros_like(layer.weight)
  • 問題:全零初始化可能會導致所有神經元的輸出相同,無法產生有效的特征學習,從而無法打破對稱性,阻礙學習過程。
  • 總結:全零初始化不推薦用于深度神經網絡,因為會導致訓練停滯。
1.2 全1初始化

全1初始化會導致網絡中每個神經元接收到相同的輸入信號,進而輸出相同的值,這就無法進行學習和收斂,所以全1初始化只是一個理論上的初始化方法,但在實際神經網絡的訓練中并不適用。

layer.weight.data.fill_(1)
  • 問題:全1初始化同樣存在對稱性問題,導致每個神經元的梯度更新相同,無法有效學習不同的特征。
  • 總結:雖然不如全零初始化明顯問題大,但依然不可取。
1.3 任意常數初始化

將所有參數初始化為某個非0的常數(如0.1.-1等),雖然不同于全0 和全1,但這種方法依然不能避免對稱性破壞的問題

layer.weight.data.fill_(0.01)
  • 問題:雖然這能避免全零初始化的問題,但常數初始化可能無法適應不同規模的模型,且并未針對性地利用權重的分布。
  • 總結:常數初始化可能對簡單模型有效,但對于深度學習任務,無法保證穩定的訓練效果。

2. 隨機初始化

隨機初始化能夠幫助打破對稱性,使得每個神經元在訓練時能夠有獨立的學習能力。

2.1 均勻分布初始化

方法:將權重初始化為隨機的小值,通常為正態分布或均勻分布中采樣

layer.weight.data.uniform_(-0.1, 0.1)
  • 問題:雖然能夠打破對稱性,但可能存在權重值過大或過小導致梯度消失或爆炸的問題。
  • 總結:一般用于較簡單模型,對于復雜模型不推薦使用。
2.2 正態分布初始化
layer.weight.data.normal_(mean=0.0, std=0.01)
  • 問題:盡管能打破對稱性,過大的方差可能導致梯度爆炸或消失問題。
  • 總結:適用于較淺的網絡,仍需調整方差。

3. Xavier初始化

前置知識

均勻分布:

均勻分布的概率密度函數(PDF):
p(x)={1b?a如果a≤x≤b0其他情況p(x)=\begin{cases}\frac{1}{b?a} & 如果 a≤x≤b\\ 0 & 其他情況 \end{cases} p(x)={b?a1?0?如果axb其他情況?
計算期望值(均值):
E[X]=∫abx?p(x)dx=∫abx?1b?adx=a+b2E[X]=∫_a^bx?p(x)?dx=∫_a^bx?\frac{1}{b?a}?dx=\frac{a+b}{2} E[X]=ab?x?p(x)?dx=ab?x?b?a1??dx=2a+b?
計算方差(二階矩減去均值的平方):
Var(X)=E(X?E(X))2=E[X2]?(E[X])2Var(X)=E(X-E(X))^2=E[X^2]?(E[X])^2 Var(X)=E(X?E(X))2=E[X2]?(E[X])2

  • 先計算 E[X2]E[X^2]E[X2]
    E[X2]=∫abx2?1b?adx=b3?a33(b?a)=a2+ab+b23E[X^2]=∫_a^bx^2?\frac{1}{b?a}?dx=\frac{b^3?a^3}{3(b?a)}=\frac{a^2+ab+b^2}{3} E[X2]=ab?x2?b?a1??dx=3(b?a)b3?a3?=3a2+ab+b2?

  • 代入方差公式:
    Var(X)=a2+ab+b23?(a+b2)2=(b?a)212Var(X)=\frac{a^2+ab+b^2}{3}?(\frac{a+b}{2})^2=\frac{(b?a)^2}{12} Var(X)=3a2+ab+b2??(2a+b?)2=12(b?a)2?

Xavier 初始化(由 Xavier Glorot 在 2010 年提出)是一種自適應權重初始化方法,專門為解決神經網絡訓練初期的梯度消失或爆炸問題而設計。Xavier 初始化也叫做Glorot初始化。Xavier 初始化的核心思想是根據輸入和輸出的維度來初始化權重,使得每一層的輸出的方差保持一致。具體來說,權重的初始化范圍取決于前一層的神經元數量(輸入維度)和當前層的神經元數量(輸出維度)。

方法:根據輸入和輸出神經元的數量來選擇權重的初始值。

數學原理:

(1) 前向傳播的方差一致性

假設輸入 x 的均值為 0,方差為 σx2σ_x^2σx2?,權重 W的均值為 0,方差為 σW2σ_W^2σW2?,則輸出 z=Wxz=Wxz=Wx的方差為:
Var(z)=nin?Var(W)?Var(x)Var(z)=n_{in}?Var(W)?Var(x) Var(z)=nin??Var(W)?Var(x)
為了使 Var(z)=Var(x),需要:
nin?Var(W)=1?Var(W)=1ninn_{in}?Var(W)=1?????Var(W)=\frac{1}{n_{in}} nin??Var(W)=1?????Var(W)=nin?1?
其中 ninn_{in}nin?是輸入維度(fan_in)。這里乘以 nin 的原因是,輸出 z 是由 nin 個輸入 x 的線性組合得到的,每個輸入 x 都與一個權重 W 相乘。因此,輸出 z 的方差是 nin 個獨立的 Wx 項的方差之和。

(2) 反向傳播的梯度方差一致性

在反向傳播過程中,梯度 ?L?x\frac{?L}{?x}?x?L? 是通過鏈式法則計算得到的,其中 L 是損失函數,x 是輸入,z 是輸出。梯度?L?x\frac{?L}{?x}?x?L?可以表示為:
?L?x=?L?z.?z?x\frac{?L}{?x}=\frac{?L}{?z}.\frac{?z}{?x} ?x?L?=?z?L?.?x?z?
假設 z=Wx,其中 W 是權重矩陣,那么 ?z?x=W\frac{?z}{?x}=W?x?z?=W。因此,梯度 ?L?x\frac{?L}{?x}?x?L?可以寫為: ?L?x=?L?zW\frac{?L}{?x}=\frac{?L}{?z}W?x?L?=?z?L?W

反向傳播時梯度 ?L?x\frac{?L}{?x}?x?L? 的方差應與 ?L?z\frac{?L}{?z}?z?L? 相同,因此:
nout?Var(W)=1?Var(W)=1noutn_{out}?Var(W)=1?????Var(W)=\frac{1}{n_{out}} nout??Var(W)=1?????Var(W)=nout?1?
其中 noutn_{out}nout?是輸出維度(fan_out)。為了保持梯度的方差一致性,我們需要確保每個輸入維度 nin 的梯度方差與輸出維度 nout 的梯度方差相同。因此,我們需要將 W 的方差乘以 nout,以確保梯度的方差在反向傳播過程中保持一致。

(3) 綜合考慮

為了同時平衡前向傳播和反向傳播,Xavier 采用:
Var(W)=2nin+noutVar(W)=\frac{2}{n_{in}+n_{out}} Var(W)=nin?+nout?2?
權重從以下分布中采樣:

均勻分布
W~U(?6nin+nout,6nin+nout)W\sim\mathrm{U}\left(-\frac{\sqrt{6}}{\sqrt{n_\mathrm{in}+n_\mathrm{out}}},\frac{\sqrt{6}}{\sqrt{n_\mathrm{in}+n_\mathrm{out}}}\right) WU(?nin?+nout??6??,nin?+nout??6??)

在Xavier初始化中,我們選擇 a=?6nin+nouta=?\sqrt{\frac{6}{n_{in}+n_{out}}}a=?nin?+nout?6??b=6nin+noutb=\sqrt{\frac{6}{n_{in}+n_{out}}}b=nin?+nout?6??,這樣方差為:
Var(W)=(b?a)212=(26nin+nout)212=4?6nin+nout12=2nin+noutVar(W)=\frac{(b?a)^2}{12}=\frac{(2\sqrt{\frac{6}{n_{in}+n_{out}}})^2}{12}=\frac{4?\frac{6}{nin+nout}}{12}=\frac{2}{n_{in}+n_{out}} Var(W)=12(b?a)2?=12(2nin?+nout?6??)2?=124?nin+nout6??=nin?+nout?2?
正態分布
W~N(0,2nin+nout)W\sim\mathrm{N}\left(0,\frac{2}{n_\mathrm{in}+n_\mathrm{out}}\right) WN(0,nin?+nout?2?)

N(0,std2)\mathcal{N}(0, \text{std}^2) N(0,std2)

其中 ninn_{\text{in}}nin? 是當前層的輸入神經元數量,noutn_{\text{out}}nout?是輸出神經元數量。

在前向傳播中,輸出的方差受 ninn_{in}nin? 影響。在反向傳播中,梯度的方差受 noutn_{out}nout? 影響。

優點:平衡了輸入和輸出的方差,適合SigmoidSigmoidSigmoidTanhTanhTanh 激活函數。

應用場景:常用于淺層網絡或使用SigmoidSigmoidSigmoidTanhTanhTanh 激活函數的網絡。

代碼演示:

import torch
import torch.nn as nndef test007():# Xavier初始化:正態分布linear = nn.Linear(in_features=6, out_features=4)nn.init.xavier_normal_(linear.weight)print(linear.weight)# Xavier初始化:均勻分布linear = nn.Linear(in_features=6, out_features=4)nn.init.xavier_uniform_(linear.weight)print(linear.weight)if __name__ == "__main__":test007()

打印結果:

Parameter containing:
tensor([[-0.4838,  0.4121, -0.3171, -0.2214, -0.8666, -0.4340],[ 0.1059,  0.6740, -0.1025, -0.1006,  0.5757, -0.1117],[ 0.7467, -0.0554, -0.5593, -0.1513, -0.5867, -0.1564],[-0.1058,  0.5266,  0.0243, -0.5646, -0.4982, -0.1844]],requires_grad=True)
Parameter containing:
tensor([[-0.5263,  0.3455,  0.6449,  0.2807, -0.3698, -0.6890],[ 0.1578, -0.3161, -0.1910, -0.4318, -0.5760,  0.3746],[ 0.2017, -0.6320, -0.4060,  0.3903,  0.3103, -0.5881],[ 0.6212,  0.3077,  0.0783, -0.6187,  0.3109, -0.6060]],requires_grad=True)

4. He初始化

也叫kaiming 初始化。He 初始化的核心思想是調整權重的初始化范圍,使得每一層的輸出的方差保持一致。與 Xavier 初始化不同,He 初始化專門針對 ReLU 激活函數的特性進行了優化。

數學推導

(1) 前向傳播的方差一致性

對于 ReLU 激活函數,輸出的方差為:
Var(z)=12nin?Var(W)?Var(x)Var(z)=\frac{1}{2}n_{in}?Var(W)?Var(x) Var(z)=21?nin??Var(W)?Var(x)
(因為 ReLU 使一半神經元輸出為 0,方差減半)
為使 Var(z)=Var(x),需:
12nin?Var(W)=1?Var(W)=2nin\frac{1}{2}n_{in}?Var(W)=1?????Var(W)=\frac{2}{n_{in}} 21?nin??Var(W)=1?????Var(W)=nin?2?
(2) 反向傳播的梯度一致性

類似地,反向傳播時梯度方差需滿足:
Var(?L?x)=12nout?Var(W)?Var(?L?z)Var(\frac{?L}{?x})=\frac{1}{2}n_{out}?Var(W)?Var(\frac{?L}{?z}) Var(?x?L?)=21?nout??Var(W)?Var(?z?L?)
因此:
Var(W)=2noutVar(W)=\frac{2}{n_{out}} Var(W)=nout?2?
(3) 兩種模式

  • fan_in 模式(默認):優先保證前向傳播穩定,方差 2nin\frac{2}{n_{in}}nin?2?
  • fan_out 模式:優先保證反向傳播穩定,方差2nout\frac{2}{n_{out}}nout?2?

方法:專門為 ReLU 激活函數設計。權重從以下分布中采樣:

均勻分布:
W~U(?6nin,6nin)W\sim\mathrm{U}\left(-\frac{\sqrt{6}}{\sqrt{n_\mathrm{in}}},\frac{\sqrt{6}}{\sqrt{n_\mathrm{in}}}\right) WU(?nin??6??,nin??6??)
正態分布:
W~N(0,2nin)W\sim\mathrm{N}\left(0,\frac{2}{n_\mathrm{in}}\right) WN(0,nin?2?)
其中 ninn_{\text{in}}nin? 是當前層的輸入神經元數量。

優點:適用于ReLUReLUReLULeakyReLULeaky ReLULeakyReLU 激活函數。

應用場景:深度網絡,尤其是使用 ReLU 激活函數時。

代碼演示:

import torch
import torch.nn as nndef test006():# He初始化:正態分布linear = nn.Linear(in_features=6, out_features=4)nn.init.kaiming_normal_(linear.weight, nonlinearity="relu", mode='fan_in')print(linear.weight)# He初始化:均勻分布linear = nn.Linear(in_features=6, out_features=4)nn.init.kaiming_uniform_(linear.weight, nonlinearity="relu", mode='fan_out')print(linear.weight)if __name__ == "__main__":test006()

輸出結果:

Parameter containing:
tensor([[ 1.4020,  0.2030,  0.3585, -0.7419,  0.6077,  0.0178],[-0.2860, -1.2135,  0.0773, -0.3750, -0.5725,  0.9756],[ 0.2938, -0.6159, -1.1721,  0.2093,  0.4212,  0.9079],[ 0.2050,  0.3866, -0.3129, -0.3009, -0.6659, -0.2261]],requires_grad=True)Parameter containing:
tensor([[-0.1924, -0.6155, -0.7438, -0.2796, -0.1671, -0.2979],[ 0.7609,  0.9836, -0.0961,  0.7139, -0.8044, -0.3827],[ 0.1416,  0.6636,  0.9539,  0.4735, -0.2384, -0.1330],[ 0.7254, -0.4056, -0.7621, -0.6139, -0.6093, -0.2577]],requires_grad=True)

5. 總結

合理的參數初始化有助于網絡的訓練穩定性。對于較淺的網絡,隨機初始化或Xavier初始化即可。而對于深度網絡,推薦使用He初始化,以避免梯度消失或爆炸。


二、損失函數

損失函數是機器學習中優化目標的關鍵,選擇合適的損失函數可以幫助模型快速有效地學習任務。

1. 線性回歸損失函數

1.1 MAE(Mean Absolute Error)損失

MAE(Mean Absolute Error,平均絕對誤差)通常也被稱為 L1-Loss,通過對預測值和真實值之間的絕對差取平均值來衡量他們之間的差異。

MAE的公式如下:
MAE=1n∑i=1n∣yi?y^i∣\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} \left| y_i - \hat{y}_i \right| MAE=n1?i=1n?yi??y^?i?
其中:

  • nnn 是樣本的總數。
  • yiy_i yi? 是第 iii 個樣本的真實值。
  • y^i\hat{y}_iy^?i? 是第 iii 個樣本的預測值。
  • ∣yi?y^i∣\left| y_i - \hat{y}_i \right|yi??y^?i? 是真實值和預測值之間的絕對誤差。

特點

  1. 魯棒性:與均方誤差(MSE)相比,MAE對異常值(outliers)更為魯棒,因為它不會像MSE那樣對較大誤差平方敏感。
  2. 物理意義直觀:MAE以與原始數據相同的單位度量誤差,使其易于解釋。

應用場景
MAE通常用于需要對誤差進行線性度量的情況,尤其是當數據中可能存在異常值時,MAE可以避免對異常值的過度懲罰。

使用torch.nn.L1Loss即可計算MAE:

import torch
import torch.nn as nn# 初始化MAE損失函數
mae_loss = nn.L1Loss()# 假設 y_true 是真實值, y_pred 是預測值
y_true = torch.tensor([3.0, 5.0, 2.5])
y_pred = torch.tensor([2.5, 5.0, 3.0])# 計算MAE
loss = mae_loss(y_pred, y_true)
print(f'MAE Loss: {loss.item()}')
1.2 MSE(Mean Squared Error)損失

均方差損失,也叫L2Loss。

MSE(Mean Squared Error,均方誤差)通過對預測值和真實值之間的誤差平方取平均值,來衡量預測值與真實值之間的差異。

MSE的公式如下:
MSE=1n∑i=1n(yi?y^i)2\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} \left( y_i - \hat{y}_i \right)^2 MSE=n1?i=1n?(yi??y^?i?)2
其中:

  • nnn 是樣本的總數。
  • yiy_i yi? 是第 iii 個樣本的真實值。
  • y^i\hat{y}_i y^?i? 是第 iii 個樣本的預測值。
  • (yi?y^i)2\left( y_i - \hat{y}_i \right)^2(yi??y^?i?)2 是真實值和預測值之間的誤差平方。

特點

  1. 平方懲罰:因為誤差平方,MSE 對較大誤差施加更大懲罰,所以 MSE 對異常值更為敏感。
  2. 凸性:MSE 是一個凸函數(國際的叫法,國內叫凹函數),這意味著它具有一個唯一的全局最小值,有助于優化問題的求解。

應用場景

MSE被廣泛應用在神經網絡中。

使用 torch.nn.MSELoss 可以實現:

import torch
import torch.nn as nn# 初始化MSE損失函數
mse_loss = nn.MSELoss()# 假設 y_true 是真實值, y_pred 是預測值
y_true = torch.tensor([3.0, 5.0, 2.5])
y_pred = torch.tensor([2.5, 5.0, 3.0])# 計算MSE
loss = mse_loss(y_pred, y_true)
print(f'MSE Loss: {loss.item()}')

2. CrossEntropyLoss(交叉熵損失)

2.1 信息量、信息熵、KL散度
  • 信息量:反映一個事件不確定性的大小,常用對數表示。時間發生的概率越低,其信息量越大
  • 信息熵:是信息量的期望值,表示系統的平均不確定性。
  • KL散度:衡量兩個概率分布的相似度,常用于評估模型的輸出分布與目標分布的差異。KL散度越小,表示兩個分布越接近
2.2 交叉熵損失(CrossEntropyLoss)
loss = F.cross_entropy(pred, target)
  • 解釋:交叉熵損失函數用于分類任務,衡量兩個概率分布之間的差異,能夠有效訓練分類模型。
  • 總結:交叉熵損失函數常用于多分類任務中,是分類問題的標準損失函數。

3. BCELoss(二元交叉熵損失)

loss = F.binary_cross_entropy(pred, target)
  • 解釋:BCELoss用于二分類任務,衡量目標概率分布與預測概率分布之間的差異。
  • 總結:當模型處理二分類任務時,BCELoss是最常見的損失函數。

4. 總結

選擇損失函數時,應該根據任務的類型(回歸、分類等)以及對異常值的敏感度來選擇。MAE適合異常值少的任務,MSE適合精度要求高的任務,而交叉熵和BCELoss分別適用于多分類和二分類問題。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94419.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94419.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94419.shtml

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

相關文章

Android Glide常見問題解決方案:從圖片加載到內存優化

全面總結Glide使用中的典型問題與解決方案,助力提升應用性能與用戶體驗作為Android開發中最流行的圖片加載庫之一,Glide以其簡單易用的API和強大的功能深受開發者喜愛。然而,在實際使用過程中,我們往往會遇到各種問題,…

linux系統ollama監聽0.0.0.0:11434示例

docker應用如dify訪問本地主機部署的ollama,base_url不管配"http://localhost:11434",還是"http://host_ip:11434"都會報錯。這是因為1)docker容器訪問http://localhost:11434,其實訪問的是docker容器自身的服…

Java微服務AI集成指南:LangChain4j vs SpringAI

今天想再完善一下做的微服務項目,想著再接入一個人工客服,于是學習了一下langchan4j的內容,未完一、技術定位辨析:LangChain4j vs Spring AI vs OpenAIOpenAI:AI模型提供商 提供大語言模型API(如GPT-4o&…

華為光學設計面試題

16. 題目:設計一個用于機器視覺檢測的光學系統時,如何保證在高速運動下成像的清晰度和穩定性?(出處:華為智能制造光學檢測項目組招聘面試題)17. 題目:請說明在光學系統設計中,如何權衡景深和分辨率的關系&a…

vue3和react的異同點

這是一個前端領域非常核心的話題。Vue 3 和 React 都是極其優秀的現代前端框架,它們在理念和實現上既有相似之處,也有顯著區別。 下面我將從多個維度詳細對比它們的異同點。核心哲學與設計理念特性Vue 3React設計理念漸進式框架與 “救世主”聲明式 UI 庫…

assetbuddle hash 比對

1.測試 :當在預設上的數據有修改時,生成的ab也會有修改,具體到某個ab的.manifest里會有相應的變化,AssetFileHash 會修改 如圖所示: ManifestFileVersion: 0 CRC: 2818930197 Hashes: AssetFileHash: serializedVersio…

Spring Boot `@Configuration` 與 `@Component` 筆記

Spring Boot Configuration 與 Component 筆記 1?? 基本概念注解作用是否有代理適用場景Component標記普通組件,將類交給 Spring 容器管理? 沒有 CGLIB 代理普通 Bean,工具類、過濾器、監聽器等Configuration標記配置類,用來聲明 Bean? 有…

二、JVM 入門——(三)棧

棧的定義 棧也是一塊區域,用來存放數據的。棧也叫棧內存,主管Java程序的運行。 棧是私有的,是在線程創建時創建,所以它的生命期是跟隨線程的生命期,線程結束棧內存也就釋放。 因此對于棧來說不存在垃圾回收問題&…

深度學習入門第一課——神經網絡實現手寫數字識別

昨天我們講了深度學習的大致框架,下面我們用深度學習網絡來實現一個小項目——手寫數字識別。完整代碼import torch from torch import nn from torch.utils.data import DataLoader from torchvision import datasets from torchvision.transforms import ToTensor…

Vue中的scoped屬性

理解&#xff1a; 在 .vue 文件中&#xff0c;scoped 是 <style> 標簽的一個屬性&#xff0c;作用是讓樣式只作用于當前組件&#xff0c;避免樣式污染其他組件 scoped 讓樣式只在自己的組件內生效&#xff0c;不會影響到其他組件的同名元素 舉例 沒有 scoped 的情況&…

S2B2B系統哪個好,商淘云、數商云、金蝶云蒼穹供應鏈批發哪個比較靠譜

在數字化商業浪潮洶涌的當下&#xff0c;S2B2B系統已成為眾多企業優化供應鏈、提升運營效率、拓展業務版圖的關鍵利器。從大型企業的復雜產業鏈協同&#xff0c;到中小企業對上下游資源的整合與把控&#xff0c;S2B2B系統的身影無處不在。但面對市場上層出不窮的各類S2B2B系統&…

利用3臺機器搭建Kubernetes集群

文章目錄1 機器準備修改主機名(可選)配置IP地址和主機名映射關閉防火墻關閉swap2 安裝docker修改并更新軟件源安裝docker設置路由轉發規則&#xff0c;并使配置生效安裝 kubelet&#xff0c;kubeadm&#xff0c;kubectl3 初始化集群4 集群初始化5 work節點加入6 部署網絡插件本…

C6.3:發射結交流電阻

當一個小交流電壓加在發射結上&#xff0c;會產生發射極交流電流&#xff0c;該交流電流的大小取決于Q點位置&#xff0c;而曲線是彎曲的&#xff0c;所以Q點在曲線上的位置越高&#xff0c;發射極交流電流的峰值越大。發射極總電流是直流分量和交流分量疊加而成&#xff0c;即…

python中生成器

生成器是根據算法生成數據的一種機制&#xff0c;每次調用生成器只生成一個值&#xff0c;可以節省大量內存生成器推導式gg ( i * 2 for i in range(5))print(gg)print(next(gg)) # 0 print(next(gg)) # 2 print(next(gg)) # 4 print(next(gg)) # 6 print(next(gg)) # 8yield…

【RAGFlow代碼詳解-28】部署和基礎設施

Docker 部署架構 RAGFlow 使用多階段 Docker 構建過程和 Docker Compose 編排進行部署。該系統支持完整和輕量級部署變體。 多階段 Docker 構建構建過程由 Dockerfile 2-214中定義的三個階段組成&#xff1a; 基礎階段 &#xff1a;使用系統依賴項、ML 模型和運行時環境設置 Ub…

【prism】Prism 彈窗在 ViewModel 中控制大小的實踐總結

好 &#x1f44d; 這個思路非常適合寫成一篇 實用型博客&#xff0c;主題就是 “Prism 彈窗如何在 ViewModel 中控制窗口大小”。我幫你整理了一篇文章草稿&#xff0c;你可以直接拿去修改/發布。Prism 彈窗在 ViewModel 中控制大小的實踐總結 在 WPF 中使用 Prism 的 IDialogS…

項目管理進階——研發項目立項管理制度

為使公司研究開發(以下簡稱研發)項目的管理工作規范化、程序化、充分調度研發人員的積極性,提高研發成果的產出率和成果轉化率,特制定管理辦法。 一、 研發項目的立項: 原則上公司部設立基礎研究項目。研發項目的重點放在符合市場需要。能很快轉化成產品,或對現有生產工…

CMake構建學習筆記20-iconv庫的構建

1. 構建 iconv是一個用于在不同字符編碼&#xff08;如 UTF-8、GBK、ISO-8859-1 等&#xff09;之間進行轉換的開源庫。筆者在《c中utf8字符串和gbk字符串的轉換》這篇文章中介紹過如何在Windows下實現utf8字符串和gbk字符串的轉換&#xff0c;不過該實現是基于Win32 API的&am…

STM32的Sg90舵機

1.舵機到底要的是什么信號&#xff1f;想象舵機就像一個“聽秒表的工人”&#xff1a;這個工人每隔 20ms 就抬頭看看秒表一次。秒表上的 高電平持續多久&#xff0c;他就把這個時間當成“指令角度”。高 1ms → 轉到最左&#xff08;0&#xff09; 高 1.5ms → 轉到中間&#x…

動態帶寬擴展(DBE):下一代Wi-Fi性能提升的關鍵技術

動態帶寬擴展(DBE):下一代Wi-Fi性能提升的關鍵技術 引言 在無線通信技術快速發展的今天,用戶對網絡帶寬和傳輸速率的需求呈指數級增長。為了滿足這種需求,IEEE 802.11標準不斷演進,引入了多項創新技術。其中,動態帶寬擴展(Dynamic Bandwidth Expansion, DBE) 作為80…