深度學習激活函數與損失函數全解析:從Sigmoid到交叉熵的數學原理與實踐應用

目錄

  • 前言
  • 一、sigmoid 及導數求導
  • 二、tanh?
  • 三、ReLU?
  • 四、Leaky Relu
  • 五、 Prelu
  • 六、Softmax
  • 七、ELU
  • 八、極大似然估計與交叉熵損失函數
  • 8.1 極大似然估計與交叉熵損失函數算法理論
  • 8.1.1 伯努利分布
  • 8.1.2 二項分布
  • 8.1.3 極大似然估計
  • 總結

前言

書接上文

PaddlePaddle線性回歸詳解:從模型定義到加載,掌握深度學習基礎-CSDN博客文章瀏覽閱讀995次,點贊24次,收藏18次。本文深入講解了使用PaddlePaddle框架實現線性回歸的完整流程,涵蓋了模型定義(包括序列方式和類方式)、數據加載、模型保存(基礎API和高級API)、模型加載(基礎API和高級API)以及模型網絡結構查看等關鍵步驟,旨在幫助讀者全面掌握PaddlePaddle框架下線性回歸的實現方法,并理解其背后的原理。同時,文章還涉及曲線擬合的理論與實踐,以及多種激活函數的特性與應用,為讀者構建扎實的深度學習基礎。 https://blog.csdn.net/qq_58364361/article/details/147408186?fromshare=blogdetail&sharetype=blogdetail&sharerId=147408186&sharerefer=PC&sharesource=qq_58364361&sharefrom=from_link


一、sigmoid 及導數求導

import numpy as np  # 導入 numpy 庫,用于數值計算
import matplotlib.pyplot as plt  # 導入 matplotlib.pyplot 模塊,用于繪圖def sigmoid(x):"""Sigmoid 激活函數:param x: 輸入值:return: Sigmoid 函數的輸出"""return 1 / (1 + np.exp(-x))  # Sigmoid 函數的公式def sigmoid_derivative(x):"""Sigmoid 激活函數的導數:param x: 輸入值:return: Sigmoid 函數導數的輸出"""return sigmoid(x) * (1 - sigmoid(x))  # Sigmoid 導數的公式x = np.linspace(-5, 5, 100)  # 創建一個從 -5 到 5 的等間隔的 100 個點的數組
y = sigmoid(x)  # 計算 sigmoid 函數的值
y1 = sigmoid_derivative(x)  # 計算 sigmoid 導數的值plt.figure()  # 創建一個新的圖形
plt.plot(x, y, label='sigmoid')  # 繪制 sigmoid 函數的圖像
plt.plot(x, y1, label='sigmoid_derivative')  # 繪制 sigmoid 導數的圖像
plt.legend()  # 顯示圖例
plt.show()  # 顯示圖形


二、tanh?

下面學一下雙曲正切的激活函數tanh

tanh激活函數的數學公式為

該函數解決了Sigmoid函數不以零為中心的問題,它的取值范圍是(-1,1),無限接近1和-1,但永不等于1或者-1,它是關于0中心對稱,以零為中心。

tanh導數公式為:

tanh特點總結:

輸出范圍:tanh 函數的輸出范圍被限制在 -1 到 1 之間,因此它可以使神經網絡的輸出更接近于零中心,有助于減少梯度消失問題。

零中心性:tanh 函數的輸出以零為中心,即在輸入為 0 時函數值為 0,這有助于減少梯度消失問題,并使得神經網絡更容易學習。

相對于Sigmoid函數,優勢顯而易見

輸出以零為中心:tanh函數的輸出范圍是-1到1之間,其均值為零,因此它是零中心的激活函數。相比于Sigmoid函數,tanh函數能夠更好地處理數據的中心化和對稱性,有助于提高網絡的學習效率。

飽和區域更大:在輸入絕對值較大時,tanh函數的斜率較大,這使得它在非線性變換上比Sigmoid函數更加陡峭,有助于提供更強的非線性特性,從而提高了網絡的表達能力。

良好的輸出范圍:tanh函數的輸出范圍在-1到1之間,相比于Sigmoid函數的0到1之間,輸出范圍更廣,有助于減少數據在網絡中傳播時的數值不穩定性。

但是缺點也同樣明顯:

容易出現梯度消失問題:雖然相比于Sigmoid函數,tanh函數在非飽和區域的斜率較大,但在輸入絕對值較大時,其導數仍然會接近于零,可能導致梯度消失問題。

  • 計算難度同樣大
import numpy as np  # 導入 numpy 庫,用于數值計算
import matplotlib.pyplot as plt  # 導入 matplotlib.pyplot 模塊,用于繪圖def tanh(x):"""tanh 激活函數:param x: 輸入值:return: tanh 函數的輸出"""return np.tanh(x)  # 返回 tanh 函數的計算結果def tanh_derivative(x):"""tanh 激活函數的導數:param x: 輸入值:return: tanh 函數導數的輸出"""return 1 - np.tanh(x) ** 2  # 返回 tanh 導數的計算結果x = np.linspace(-5, 5, 100)  # 創建一個從 -5 到 5 的等間隔的 100 個點的數組
y = tanh(x)  # 計算 tanh 函數的值
y1 = tanh_derivative(x)  # 計算 tanh 導數的值plt.figure()  # 創建一個新的圖形
plt.plot(x, y, label='tanh')  # 繪制 tanh 函數的圖像
plt.plot(x, y1, label='tanh_derivative')  # 繪制 tanh 導數的圖像
plt.legend()  # 顯示圖例
plt.show()  # 顯示圖形


三、ReLU?

?ReLU激活函數的數學公式為:

ReLU函數其實是分段線性函數,把所有的負值都變為0,而正值不變。

ReLU函數的導數公式為:

ReLU特點:

稀疏性:ReLU 函數的導數在輸入為負數時為零,這意味著在反向傳播過程中,只有激活的神經元會傳遞梯度,從而促進了稀疏激活的現象,有助于減少過擬合。

計算高效:ReLU 函數的計算非常簡單,并且在實踐中被證明是非常高效的。

解決梯度消失問題: ReLU函數在輸入大于零時輸出其本身值,這使得在反向傳播時梯度保持為常數1,避免了梯度消失問題。ReLU函數在深度網絡中更容易訓練。

ReLU函數的優勢

  • 解決梯度消失問題: ReLU函數在輸入大于零時輸出輸入值,這使得在反向傳播時梯度保持為常數1,避免了梯度消失問題。相比于Sigmoid和tanh函數,ReLU函數在深度網絡中更容易訓練,使得網絡能夠更有效地學習復雜的特征。
  • 計算速度快: ReLU函數的計算非常簡單,只需進行一次閾值判斷和取最大值操作。這使得在大規模深度神經網絡中,ReLU函數的計算速度遠快于Sigmoid和tanh函數,加快了模型訓練的速度。
  • 稀疏激活性: 在輸入小于零的情況下,ReLU函數的輸出是零,這表現為稀疏激活性。這意味著在激活后,一部分神經元將被激活,而其他神經元則保持不活躍。這有助于減少神經網絡中的冗余計算和參數數量,提高了網絡的泛化能力。

它的劣勢:

  • 死亡ReLU問題(Dying ReLU): 在訓練過程中,某些神經元可能會遇到“死亡ReLU”問題,即永遠不會被激活。如果某個神經元在訓練過程中的權重更新導致在其上的輸入始終為負值,那么它的輸出將永遠為零。這意味著該神經元不會再學習或參與后續訓練,導致該神經元“死亡”,從而減少了網絡的表達能力。

死亡relu問題理解

ReLU函數導數只可以取兩個值,當輸入小于0時,導數為0;當輸入大于0時,導數為1,在反向傳播過程中,

(w新=w舊-學習率*梯度),如果學習率比較大,一個很大的梯度更新后,經過Relu激活函數,可能會導致ReLU神經元更新后的權重是負數,進而導致下一輪正向傳播過程中ReLU神經元的輸入是負數,輸出是0,由于ReLU神經元的輸出為0,在后續迭代的反向過程中,該處的梯度一直為0,相關參數不再變化,從而導致ReLU神經元的輸入始終是負數,輸出始終為0。即為“死亡ReLU問題”。

(relu產生的情況,第一種情況就是輸入大部分是負值,第二種情況 w更新后成為負數,第3種情況就是b為比較大的負數)

  • 輸出不是以零為中心: ReLU函數的輸出范圍是從零開始,因此輸出不是以零為中心的。這可能會導致訓練過程中的參數更新存在偏差,降低了網絡的優化能力。
  • 不適合所有問題: 盡管ReLU函數在大多數情況下表現良好,但并不是適合所有問題。對于一些問題,特別是在處理一些包含負值的數據時,ReLU函數可能不夠理想,可能會產生不良的結果。

針對ReLU函數的劣勢,研究人員也提出了一些改進的激活函數,如Leaky ReLU、Parametric ReLU和Exponential Linear Units(ELU)等,這些函數在一定程度上緩解了ReLU函數的問題,并在特定情況下表現更好。因此,在實際使用中,根據具體問題和實驗結果選擇合適的激活函數是很重要的。

import numpy as np  # 導入 numpy 庫,用于數值計算
import matplotlib.pyplot as plt  # 導入 matplotlib.pyplot 模塊,用于繪圖def relu(x):"""ReLU 激活函數:param x: 輸入值:return: ReLU 函數的輸出"""return np.maximum(0, x)  # 返回 ReLU 函數的計算結果,即 max(0, x)def relu_derivative(x):"""ReLU 激活函數的導數:param x: 輸入值:return: ReLU 函數導數的輸出"""return np.where(x > 0, 1, 0)  # 返回 ReLU 導數的計算結果,當 x > 0 時為 1,否則為 0x = np.linspace(-5, 5, 100)  # 創建一個從 -5 到 5 的等間隔的 100 個點的數組
y = relu(x)  # 計算 ReLU 函數的值
y1 = relu_derivative(x)  # 計算 ReLU 導數的值plt.figure()  # 創建一個新的圖形
plt.plot(x, y, label='relu')  # 繪制 ReLU 函數的圖像
plt.plot(x, y1, label='relu_derivative')  # 繪制 ReLU 導數的圖像
plt.legend()  # 顯示圖例
plt.show()  # 顯示圖形

四、Leaky Relu

公式:

f(x)=max(αx, x),其中 α 是一個小常數(例如0.01)

導數:

f’(x)=1,當x>0時。

f’(x)=α,當x<=0時。

Leaky ReLU 通過在負數區域引入小的正斜率 α 來避免ReLU的“死亡”問題,允許負數區域的梯度不為零。

import numpy as np  # 導入 numpy 庫,用于數值計算
import matplotlib.pyplot as plt  # 導入 matplotlib.pyplot 模塊,用于繪圖def leaky_relu(x, a=0.01):"""Leaky ReLU 激活函數:param x: 輸入值:param a: 斜率,默認為 0.01:return: Leaky ReLU 函數的輸出"""return np.maximum(a * x, x)  # 返回 Leaky ReLU 函數的計算結果,即 max(a*x, x)def leaky_relu_derivative(x, a=0.01):"""Leaky ReLU 激活函數的導數:param x: 輸入值:param a: 斜率,默認為 0.01:return: Leaky ReLU 函數導數的輸出"""return np.where(x > 0, 1, a)  # 返回 Leaky ReLU 導數的計算結果,當 x > 0 時為 1,否則為 ax = np.linspace(-5, 5, 100)  # 創建一個從 -5 到 5 的等間隔的 100 個點的數組
y = leaky_relu(x)  # 計算 leaky_relu 函數的值
y1 = leaky_relu_derivative(x)  # 計算 leaky_relu 導數的值plt.figure()  # 創建一個新的圖形
plt.plot(x, y, label='relu')  # 繪制 leaky_relu 函數的圖像
plt.plot(x, y1, label='relu_derivative')  # 繪制 leaky_relu 導數的圖像
plt.legend()  # 顯示圖例
plt.show()  # 顯示圖形

五、 Prelu

Prelu 和 Leaky Relu想比,Prelu的α是可學習的。

公式:

f(x)=max(αx, x),其中 α 是一個可學習的參數。

導數:

f’(x)=1,當x>0時。

f’(x)=α,當x<=0時。

PReLU是Leaky ReLu的一個變種,其中a是通過學習得到的,這使得模型可以適應性地改變其行為。

import numpy as np  # 導入NumPy庫,用于數值計算
import matplotlib.pyplot as plt  # 導入Matplotlib庫,用于繪圖def p_relu(x, alpha=0.25):"""參數化ReLU激活函數:param x: 輸入值:param alpha: 斜率小于0時的系數,默認為0.25:return: PReLU激活值"""return np.maximum(alpha * x, x)  # 返回alpha*x和x中的較大值def p_relu_derivative(x, alpha=0.25):"""參數化ReLU激活函數的導數:param x: 輸入值:param alpha: 斜率小于0時的系數,默認為0.25:return: PReLU導數值"""return np.where(x > 0, 1, alpha)  # 當x>0時返回1,否則返回alphax = np.linspace(-5, 5, 100)  # 創建一個從-5到5的等間隔數組,包含100個點
y_p_relu = p_relu(x)  # 計算x的PReLU激活值
y_p_relu_derivative = p_relu_derivative(x)  # 計算x的PReLU導數值
plt.figure(figsize=(8, 6))  # 創建一個圖形,設置大小為8x6英寸
plt.plot(x, y_p_relu)  # 繪制x和PReLU激活值的關系圖
plt.plot(x, y_p_relu_derivative)  # 繪制x和PReLU導數值的關系圖
plt.show()  # 顯示圖形


六、Softmax

softmax激活函數,但是很多地方,不會把softmax稱為激活函數,但是呢沒有一個合理的叫法,它就叫softmax函數,但是呢,它的性質上無論和我們的sigmoid或者tanh 或者relu等其實是類似的,我們可以把它稱為激活函數。

softmax激活函數為什么不把它稱為激活函數,是因為和它的位置是有關系的。為什么呢?

softmax這個函數和我們的sigmoid函數也好。relu函數也好,不一樣的點在哪里?如果sigmoid函數位于算法的最后一層,做二分類的活。softmax函數它一般只用于最后一次的激活,也就是輸出之前的一次激活,前面不用softmax。 softmax一般不用于回歸算法中,一般是用于分類中,我們前面計算的都是在算擬合和回歸,softmax它做的是分類。

eg:貓和狗,當我們的輸出不是一個值而是一個向量的時候,比如要分成三類(貓,狗 ,老虎)三類,根據輸出的向量數值,按照下面的公式進行計算。

然后再結合后面的交叉熵就可以計算損失值。

Softmax函數,可以將神經網絡計算出來的數值通過公式變成概率,經過softmax后得到的結果相加和為1。

另一個優勢就是不論向量輸出的結果是正值還是負值都能轉化為正值。

這個在后續的深度學習中用的非常多。

當n=100時,即有100類時,其圖像如下圖所示:

softmax 特點總結:

概率分布:Softmax函數將輸入轉換為概率分布,因此在多分類問題中常用于將模型的原始輸出轉換為概率值。

連續可導:Softmax函數是連續可導的,這使得它可以與梯度下降等優化算法一起使用進行訓練。

指數增長:Softmax函數中的指數運算可能會導致數值穩定性問題,特別是當輸入較大時。為了解決這個問題,可以通過減去輸入向量中的最大值來進行數值穩定的計算。

梯度計算簡單:Softmax函數的導數計算相對簡單,可以通過對Softmax函數的定義進行微分得到。

涉及到softmax求導,看一下它怎么求導?

import numpy as np  # 導入NumPy庫,用于數值計算
import matplotlib.pyplot as plt  # 導入Matplotlib庫,用于繪圖def softmax(x):n_val = np.exp(x)  # 計算輸入x的指數d_val = np.sum(np.exp(x))  # 計算所有指數的和return n_val / d_val  # 返回Softmax值def softmax_derivative(x):s = softmax(x)  # 計算Softmax值return np.diagflat(s) - np.outer(s, s)  # 計算Softmax導數x = np.linspace(-5, 5, 50)  # 創建一個從-5到5的等間隔數組,包含50個點
y_softmax = softmax(x)  # 計算x的Softmax值
y_softmax_derivative = softmax_derivative(x)  # 計算x的Softmax導數
plt.figure(figsize=(8, 6))  # 創建一個圖形,設置大小為8x6英寸
plt.plot(x, y_softmax)  # 繪制x和Softmax值的關系圖
plt.plot(x, y_softmax_derivative)  # 繪制x和Softmax導數的關系圖
plt.show()  # 顯示圖形


七、ELU

前面的激活函數學完后,現在學習最后一個激活函數,它叫ELU的激活函數。

ELU(Expoentital Linear Unit)激活函數是深度學習中用于增強網絡學習能力的又一種激活函數,ELU通過在負值輸入時提供負值輸出,旨在結合Relu的優點和解決其潛在的一些問題,如ReLU的不活躍神經元問題。

數序定義

ELU函數的數學表達式定義為:

中,x是函數的輸入,α是一個預定義的超參數,用于控制x為負值時輸出的飽和度。

圖像如下:

2.函數特性

非線性:ELU是非線性的,可以幫助神經網絡學習復雜的數據表示。

連續可導:ELU在整個定義域內連續可導,這有助于提高梯度下降優化算法的穩定性

解決梯度消失問題:對于負值輸入,ELU提供了負值輸出,這有助于減輕梯度消失問題,尤其是在深度網絡中。

輸出均值接近0:ELU函數能夠產生負值輸出,這意味著其激活輸出的均值更接近0,有助于數據的中心化,減少訓練過程中的偏置偏移。

3.導數

ELU函數的導數如下:

圖像如下:

意味著在正數區域,梯度為1,而在負數區域,梯度取決于α和x的指數值,這有助于保持負輸入值的梯度更新。

ELU優勢:

ELU通過在負數區域引入指數衰減,能夠減少ReLU的“死亡”問題,同時保持負值的輸出,有助于保持平均激活接近零,這有助于加快學習。

ELU劣勢:

計算成本:由于ELU在負值時涉及指數運算,其計算成本高于Relu及其直接變體,尤其是在前向傳播時。

import numpy as np  # 導入NumPy庫,用于數值計算
import matplotlib.pyplot as plt  # 導入Matplotlib庫,用于繪圖def elu(x, alpha=0.25):"""ELU激活函數:param x: 輸入值:param alpha: x小于0時的系數,默認為0.25:return: ELU激活值"""return np.where(x > 0, x, alpha * (np.exp(x) - 1))  # 當x>0時返回x,否則返回alpha * (np.exp(x) - 1)def elu_derivative(x, alpha=0.25):"""ELU激活函數的導數:param x: 輸入值:param alpha: x小于0時的系數,默認為0.25:return: ELU導數值"""return np.where(x > 0, 1, alpha * (np.exp(x)))  # 當x>0時返回1,否則返回alpha * np.exp(x)x = np.linspace(-5, 5, 100)  # 創建一個從-5到5的等間隔數組,包含100個點
y_elu = elu(x)  # 計算x的ELU激活值
y_elu_derivative = elu_derivative(x)  # 計算x的ELU導數值plt.figure(figsize=(8, 6))  # 創建一個圖形,設置大小為8x6英寸
plt.plot(x, y_elu)  # 繪制x和ELU激活值的關系圖
plt.plot(x, y_elu_derivative)  # 繪制x和ELU導數值的關系圖
plt.show()  # 顯示圖形


八、極大似然估計與交叉熵損失函數

從以下3個方面對極大似然估計與交叉熵損失函數進行介紹
1.極大似然估計與交叉熵損失函數算法理論講解
2.編程實例與步驟


8.1 極大似然估計與交叉熵損失函數算法理論

交叉熵損失函數是獨立于的MSE(均方差損失函數)

交叉熵損失函數是另一種損失函數。MSE損失函數和交叉熵損失函數它們的應用場合是不一樣的。

均方差損失函數主要應用在回歸、擬合領域。(eg:有一些點用直線擬合它,或者用曲線去擬合)。

交叉熵損失函數主要應用在分類領域

交叉熵損失函數主要應用在分類領域

eg:對有貓和狗的圖片進行分類,輸入貓和狗的照片,然后特征提取,得到兩類結果,可以先用softmax,得到兩類的概率值將求解出來的概率,交給交叉熵計算損失?就可以進行模型優化了。

那分類問題指的是什么問題呢?

分類問題是機器學習中最常見的問題之一。分類問題的目標是根據給定的特征將數據分為不同的類別

分類問題怎么去優化的呢?

主要是使用最小化交叉熵損失去優化

MSE解決分類問題的弊端?

在回歸預測問題中,使用MSE作為損失函數,L2距離(歐式距離)能夠很漂亮的體現出預測值與實際值的差距(距離)。

在分類問題中,網絡輸出的是屬于某個類的概率。最后一層使用(softmax激活函數或者sigmoid激活函數)進行處理,二分類可以使用Sigmoid也可以使用Softmax,多分類使用Softmax,如果使用MSE,當與Sigmoid或Softmax搭配使用時,loss的偏導數的變化趨勢和預測值及真實值之間的數值的變化趨勢不一致。

當真實值y=1時,若預測值等于1,

等于0

當真實值y=1時,如預測值等于0,

等于0

也就是說,預測為錯誤時,依然沒有梯度讓網絡可以學習。可以得出MSE對于分類問題無法有效地度量類別之間的差異,導致對于分類任務的優化不夠敏感。


8.1.1 伯努利分布

伯努利分布是一種離散型概率分布,它描述的是一次伯努利試驗中成功和失敗的概率分布。在伯努利分布中,只有兩種可能的結果,通過用0和1來表示,其中0表示失敗,1表示成功。

伯努利分布的數學公式表達如下:

如果表示拋硬幣,則正面向上的概率 p為當x=1時,p(1)=p^1*(1-p)^(1-1)=p,

反面向上的概率1-p為當x=0時,p(0)=p^0*(1-p)=1-p


8.1.2 二項分布

二項分布是描述了n次獨立的伯努利試驗中成功的次數的概率分布。在二項分布中,每次試驗都是獨立的,且成功和失敗的概率保持不變。二項分布的概率質量函數公式如下:

其中n表示試驗次數,k表示成功的次數,p表示單次實驗成功的概率。

8.1.3 極大似然估計

極大似然估計,通俗理解來說,就是利用已知的樣本結果信息,反推最具有可能(最大概率)導致這些樣本結果出現的模型參數值

假設現在進行伯努利試驗10次,結果用隨機變量xi表示,則x1,x2,...x10,滿足獨立同分布。其值為(1,0,1,0,0,0,1,0,0,0),每個樣本出現的概率的乘積為:

對于上面的例子結果為:

極大似然估計的目標是不是要求最大的L(p)值中對應的p值?

舉個例子(p=0.1 L(p)=0.0004782969

p=0.2 L(p)=0.0016777216

p=0.5 L(p)=0.0009765625 )


總結

????????本文結合理論與實踐,詳細解析Sigmoid、tanh、ReLU系列激活函數的數學特性與梯度行為,指出ReLU的死亡問題及改進方案如Leaky ReLU、PReLU和ELU的設計邏輯。通過可視化對比各函數曲線與導數,闡明零中心性、稀疏性對神經網絡訓練的影響。在損失函數部分,從極大似然估計出發,論證交叉熵在分類任務中的必要性,對比MSE的缺陷,強調概率輸出與損失函數適配的重要性。代碼實現覆蓋函數繪制、導數計算及實際應用場景,提供完整的理論與實操參考。

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

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

相關文章

Python內置函數---breakpoint()

用于在代碼執行過程中動態設置斷點&#xff0c;暫停程序并進入調試模式。 1. 基本語法與功能 breakpoint(*args, kwargs) - 參數&#xff1a;接受任意數量的位置參數和關鍵字參數&#xff0c;但通常無需傳遞&#xff08;默認調用pdb.set_trace()&#xff09;。 - 功能&#x…

從零手寫 RPC-version1

一、 前置知識 1. 反射 獲取字節碼的三種方式 Class.forName("全類名") &#xff08;全類名&#xff0c;即包名類名&#xff09;類名.class對象.getClass() (任意對象都可調用&#xff0c;因為該方法來自Object類&#xff09; 獲取成員方法 Method getMethod(St…

ARINC818協議(六)

上圖中&#xff0c;紅色虛線上面為我們常用的simple mode簡單模式&#xff0c;下面和上面的結合在一起&#xff0c;就形成了extended mode擴展模式。 ARINC818協議 container header容器頭 ancillary data輔助數據 視頻流 ADVB幀映射 FHCP傳輸協議 R_CTRL:路由控制routing ctr…

PyCharm 鏈接 Podman Desktop 的 podman-machine-default Linux 虛擬環境

#工作記錄 PyCharm Community 連接到Podman Desktop 的 podman-machine-default Linux 虛擬環境詳細步驟 1. 準備工作 確保我們已在 Windows 系統中正確安裝并啟動了 Podman Desktop。 我們將通過 Podman Desktop 提供的名為 podman-machine-default 的 Fedora Linux 41 WSL…

小白自學python第一天

學習python的第一天 一、常用的值類型&#xff08;先來粗略認識一下~&#xff09; 類型說明數字&#xff08;number&#xff09;包含整型&#xff08;int&#xff09;、浮點型&#xff08;float&#xff09;、復數&#xff08;complex&#xff09;、布爾&#xff08;boolean&…

初階數據結構--排序算法(全解析!!!)

排序 1. 排序的概念 排序&#xff1a;所謂排序,就是使一串記錄&#xff0c;按照其中的某個或某些些關鍵字的大小&#xff0c;遞增或遞減的排列起來的操作。 2. 常見的排序算法 3. 實現常見的排序算法 以下排序算法均是以排升序為示例。 3.1 插入排序 基本思想&#xff1a;…

Android studio開發——room功能實現用戶之間消息的發送

文章目錄 1. Flask-SocketIO 后端代碼后端代碼 2. Android Studio Java 客戶端代碼客戶端代碼 3. 代碼說明 SocketIO基礎 1. Flask-SocketIO 后端代碼 后端代碼 from flask import Flask, request from flask_socketio import SocketIO, emit import uuidapp Flask(__name_…

4.LinkedList的模擬實現:

LinkedList的底層是一個不帶頭的雙向鏈表。 不帶頭雙向鏈表中的每一個節點有三個域&#xff1a;值域&#xff0c;上一個節點的域&#xff0c;下一個節點的域。 不帶頭雙向鏈表的實現&#xff1a; public class Mylinkdelist{//定義一個內部類&#xff08;節點&#xff09;stat…

Sentinel數據S2_SR_HARMONIZED連續云掩膜+中位數合成

在GEE中實現時&#xff0c;發現簡單的QA60是無法去云的&#xff0c;最近S2地表反射率數據集又進行了更新&#xff0c;原有的屬性集也進行了變化&#xff0c;現在的SR數據集名稱是“S2_SR_HARMONIZED”。那么&#xff1a; 要想得到研究區無云的圖像&#xff0c;可以參考執行以下…

理解計算機系統_網絡編程(1)

前言 以<深入理解計算機系統>(以下稱“本書”)內容為基礎&#xff0c;對程序的整個過程進行梳理。本書內容對整個計算機系統做了系統性導引,每部分內容都是單獨的一門課.學習深度根據自己需要來定 引入 網絡是計算機科學中非常重要的部分,筆者過去看過相關的內…

【2025】Datawhale AI春訓營-RNA結構預測(AI+創新藥)-Task2筆記

【2025】Datawhale AI春訓營-RNA結構預測&#xff08;AI創新藥&#xff09;-Task2筆記 本文對Task2提供的進階代碼進行理解。 任務描述 Task2的任務仍然是基于給定的RNA三維骨架結構&#xff0c;生成一個或多個RNA序列&#xff0c;使得這些序列能夠折疊并盡可能接近給定的目…

vim 命令復習

命令模式下的命令及快捷鍵 # dd刪除光所在行的內容 # ndd從光標所在行開始向下刪除n行 # yy復制光標所在行的內容 # nyy復制光標所在行向下n行的內容 # p將復制的內容粘貼到光標所在行以下&#xff08;小寫&#xff09; # P將復制的內容粘貼到光標所在行以上&#xff08;大寫&…

哪些心電圖表現無緣事業編體檢呢?

根據《公務員錄用體檢通用標準》心血管系統條款及事業單位體檢實施細則&#xff0c;心電圖不合格主要涉及以下類型及處置方案&#xff1a; 一、心律失常類 早搏&#xff1a;包括房性早搏、室性早搏和交界性早搏。如果每分鐘早搏次數較多&#xff08;如超過5次&#xff09;&…

Linux學習——UDP

編程的整體框架 bind&#xff1a;綁定服務器&#xff1a;TCP地址和端口號 receivefrom()&#xff1a;阻塞等待客戶端數據 sendto():指定服務器的IP地址和端口號&#xff0c;要發送的數據 無連接盡力傳輸&#xff0c;UDP:是不可靠傳輸 實時的音視頻傳輸&#x…

ReAct Agent 實戰:基于DeepSeek從0到1實現大模型Agent的探索模式

寫在前面:動態思考,邊想邊做 大型語言模型(LLM)的崛起開啟了通用人工智能(AGI)的無限遐想。但要讓 LLM 從一個被動的“文本生成器”轉變為能夠主動解決問題、與環境交互的智能體(Agent),我們需要賦予它思考、行動和學習的能力。ReAct (Reason + Act) 框架正是實現這一…

從物理到預測:數據驅動的深度學習的結構化探索及AI推理

在當今科學探索的時代&#xff0c;理解的前沿不再僅僅存在于我們書寫的方程式中&#xff0c;也存在于我們收集的數據和構建的模型中。在物理學和機器學習的交匯處&#xff0c;一個快速發展的領域正在興起&#xff0c;它不僅觀察宇宙&#xff0c;更是在學習宇宙。 AI推理 我們…

結合地理數據處理

CSV 文件不僅可以存儲表格數據&#xff0c;還可以與地理空間數據結合&#xff0c;實現更強大的地理處理功能。例如&#xff0c;你可以將 CSV 文件中的坐標數據轉換為點要素類&#xff0c;然后進行空間分析。 示例&#xff1a;將 CSV 文件中的坐標數據轉換為點要素類 假設我們有…

SpringBoot中6種自定義starter開發方法

在SpringBoot生態中,starter是一種特殊的依賴,它能夠自動裝配相關組件,簡化項目配置。 自定義starter的核心價值在于: ? 封裝復雜的配置邏輯,實現開箱即用 ? 統一技術組件的使用規范,避免"輪子"泛濫 ? 提高開發效率,減少重復代碼 方法一:基礎配置類方式 …

滾珠導軌松動會導致哪些影響?

直線導軌用于高精度或快速直線往復運動場所&#xff0c;且能夠擔負一定的扭矩&#xff0c;在高負載的情況下實現高精度的直線運動。它主要由導軌和滑塊組成&#xff0c;其中導軌作為固定元件&#xff0c;滑塊則在其上進行往復直線運動。但是滾珠導軌松動會導致哪些影響&#xf…

從零開始搭建Django博客②--Django的服務器內容搭建

本文主要在Ubuntu環境上搭建&#xff0c;為便于研究理解&#xff0c;采用SSH連接在虛擬機里的ubuntu-24.04.2-desktop系統搭建&#xff0c;當涉及一些文件操作部分便于通過桌面化進行理解&#xff0c;通過Nginx代理綁定域名&#xff0c;對外發布。 此為從零開始搭建Django博客…