交叉熵損失函數(Cross-Entropy Loss)

原理

交叉熵損失函數是深度學習中分類問題常用的損失函數,特別適用于多分類問題。它通過度量預測分布與真實分布之間的差異,來衡量模型輸出的準確性。

交叉熵的數學公式

交叉熵的定義如下:
C r o s s E n t r o y L o s s = ? ∑ i = 1 N y i ? l o g ( y ^ i ) \begin{equation} CrossEntroyLoss = -\sum_{i=1}^{N}y_i \cdot log(\hat{y}_i) \end{equation} CrossEntroyLoss=?i=1N?yi??log(y^?i?)??

  • N N N:類別數
  • y i y_i yi?:真實的標簽(用 one-hot 編碼表示,只有目標類別對應的位置為 1,其他位置為 0)。
  • y ^ i \hat{y}_i y^?i??:模型的預測概率,即 softmax 的輸出值。

對于單個樣本:
L o s s = ? l o g ( y ^ c ) \begin{equation} Loss = -log(\hat{y}_c) \end{equation} Loss=?log(y^?c?)??
其中 c c c是真實類別的索引。

解釋

  • 如果模型的預測概率 y ^ c \hat{y}_c y^?c?越接近1,則 ? l o g ( y ^ c ) -log(\hat{y}_c) ?log(y^?c?)越小,損失越大。
  • 如果 y ^ c \hat{y}_c y^?c?越接近0,則 ? l o g ( y ^ c ) -log(\hat{y}_c) ?log(y^?c?)?越大,損失越大。
交叉熵損失和softmax函數的關系
  • 模型通常輸出logits(未歸一化的分數),例如 [ z 1 , z 2 , ? , z N ] [z_1,z_2,\cdots,z_N] [z1?,z2?,?,zN?]

  • softmax函數將logits轉化為概率分布:
    y ^ i = z z i ∑ j = 1 N e z j \begin{equation} \hat{y}_i = \dfrac{z^{z_i}}{\sum_{j=1}^N e^{z_j}} \end{equation} y^?i?=j=1N?ezj?zzi????

  • 交叉熵損失結合 softmax,用來計算預測分布與真實分布之間的差異。

在 PyTorch 的 CrossEntropyLoss 中,softmax 和交叉熵是結合在一起實現的,因此你不需要手動調用 softmax。

特性

應用場景

  • 多分類任務,例如圖像分類、文本分類等。
  • 真實標簽通常以整數形式存儲(如 0, 1, 2)。

數值穩定性

  • 由于 softmax 和交叉熵結合在一起,可以避免單獨計算 softmax 導致的數值不穩定問題。

Pytorch中的實現

構造函數

PyTorch 提供了 torch.nn.CrossEntropyLoss

torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduction='mean')

參數說明:

  • weight:用于對不同類別賦予不同的權重。
  • ignore_index:指定忽略某些類別的損失(通常用于處理 padding)。
  • reduction:決定損失的輸出形式:
    • 'mean'(默認):返回損失的均值。
    • 'sum':返回損失的總和。
    • 'none':返回每個樣本的損失值。
使用示例

1、單樣本交叉熵損失

import torch
import torch.nn as nn# 模型的輸出 logits 和真實標簽
logits = torch.tensor([[2.0, 1.0, 0.1]])  # 未經過 softmax 的輸出
labels = torch.tensor([0])               # 真實標簽(類別索引)# 定義交叉熵損失函數
criterion = nn.CrossEntropyLoss()# 計算損失
loss = criterion(logits, labels)
print("CrossEntropyLoss:", loss.item())

解釋

  • logits 是未歸一化的分數。
  • labels 是類別索引(如類別 0)。
  • 內部會先對 logits 應用 softmax,再計算交叉熵損失。

計算細節

a)、給定的數據

  • logits: [ 2.0 1.0 0.1 ] \begin{bmatrix} 2.0 & 1.0 & 0.1 \end{bmatrix} [2.0?1.0?0.1?]
    • 這是模型輸出的未歸一化分數(logits)。
  • labels: [ 0 ] \begin{bmatrix} 0 \end{bmatrix} [0?]
    • 真實標簽,表示類別索引(0 表示第一類)。

b)、CrossEntropyLoss 的計算公式,交叉熵損失公式如下:
L o s s = ? 1 N ∑ i = 1 N l o g ( e x p ( l o g i t y i ) ∑ j e x p ( l o g i t j ) ) \begin{equation} Loss = -\dfrac{1}{N} \sum_{i=1}^{N} log \left( \dfrac{exp(logit_{y_i})}{\sum_j exp(logit_j)} \right) \end{equation} Loss=?N1?i=1N?log(j?exp(logitj?)exp(logityi??)?)??
其中:

  • N N N: 樣本數量(在這里為 1)。
  • l o g i t j logit_j logitj?: 第 j j j類的 logit 值。
  • y i y_i yi?: 樣本 i i i? 的真實類別索引。

c)、具體的步驟

step 1:softmax計算概率分布

softmax函數將logits轉換為概率分布:
s o f t m a x ( z i ) = e x p ( z i ) ∑ j e x p ( z j ) \begin{equation} softmax(z_i) = \dfrac{exp(z_i)}{\sum_j exp(z_j)} \end{equation} softmax(zi?)=j?exp(zj?)exp(zi?)???
對于logits: [ 2.0 1.0 0.1 ] \begin{bmatrix} 2.0 & 1.0 & 0.1 \end{bmatrix} [2.0?1.0?0.1?],計算如下:

  • 計算每個元素的指數:

e x p ( 2.0 ) = e 2 ≈ 7.389 , e x p ( 1.0 ) = e 1 ≈ 2.718 , e x p ( 0.1 ) = e 0.1 ≈ 1.105 \begin{equation} exp(2.0)=e^2 \approx 7.389, \quad exp(1.0)=e^1 \approx 2.718, \quad exp(0.1)=e^{0.1} \approx 1.105 \end{equation} exp(2.0)=e27.389,exp(1.0)=e12.718,exp(0.1)=e0.11.105??

  • 求和:

s u m = 7.389 + 2.718 + 1.105 ≈ 11.212 \begin{equation} sum = 7.389 + 2.718 + 1.105 \approx 11.212 \end{equation} sum=7.389+2.718+1.10511.212??

  • 計算每個類別的概率:

s o f t m a x ( 2.0 ) = 7.389 11.212 ≈ 0.659 , s o f t m a x ( 1.0 ) = 2.718 11.212 ≈ 0.242 , s o f t m a x ( 0.1 ) = 1.105 11.212 ≈ 0.099 \begin{equation} softmax(2.0)=\dfrac{7.389}{11.212} \approx 0.659,\quad softmax(1.0)=\dfrac{2.718}{11.212} \approx 0.242,\quad softmax(0.1)=\dfrac{1.105}{11.212} \approx 0.099 \end{equation} softmax(2.0)=11.2127.389?0.659,softmax(1.0)=11.2122.718?0.242,softmax(0.1)=11.2121.105?0.099??

概率分布為:
[ 0.659 0.242 0.099 ] \begin{bmatrix} 0.659 & 0.242 & 0.099 \end{bmatrix} [0.659?0.242?0.099?]
step 2:取真實標簽對應的概率

真實標簽 y = 0 y=0 y=0,對應的概率為第一個類別的softmax輸出:
P ( y = 0 ) = 0.659 \begin{equation} P(y=0)=0.659 \end{equation} P(y=0)=0.659??
step 3:計算交叉熵損失

根據交叉熵公式,損失為:
L o s s = ? l o g ( P ( y = 0 ) ) = ? l o g ( 0.659 ) \begin{equation} Loss = -log(P(y=0)) = -log(0.659) \end{equation} Loss=?log(P(y=0))=?log(0.659)??
計算對數值:
l o g ( 0.659 ) ≈ ? 0.416 \begin{equation} log(0.659) \approx -0.416 \end{equation} log(0.659)?0.416??
因此,損失為:
L o s s = 0.416 \begin{equation} Loss = 0.416 \end{equation} Loss=0.416??

2、多樣本交叉熵損失

logits = torch.tensor([[1.5, 0.3, 2.1], [2.0, 1.0, 0.1], [0.1, 2.2, 1.0]])  # Batch size = 3labels = torch.tensor([2, 0, 1])  # Batch size = 3# 定義交叉熵損失函數
criterion = nn.CrossEntropyLoss()# 計算損失
loss = criterion(logits, labels)
print("CrossEntropyLoss:", loss.item())

a)、給定的數據

logits(未歸一化的分數):
l o g i t s = [ 1.5 0.3 2.1 2.0 1.0 0.1 0.1 2.2 1.0 ] logits = \begin{bmatrix} 1.5 & 0.3 & 2.1 \\ 2.0 & 1.0 & 0.1 \\ 0.1 & 2.2 & 1.0 \end{bmatrix} logits= ?1.52.00.1?0.31.02.2?2.10.11.0? ?
labels(真實標簽的索引):
l a b e l s = [ 2 0 1 ] labels = \begin{bmatrix} 2 & 0 & 1 \end{bmatrix} labels=[2?0?1?]

  • 第一行對應的類別2
  • 第二行對應的類別0
  • 第三行對應的類別1

b)、交叉熵損失函數
L o s s = ? 1 N ∑ i = 1 N l o g ( e x p ( l o g i t i , y i ) ∑ j e x p ( l o g i t i , j ) ) \begin{equation} Loss = -\dfrac{1}{N} \sum_{i=1}^{N} log \left( \dfrac{exp(logit_{i,y_i})}{\sum_j exp(logit_{i,j})} \right) \end{equation} Loss=?N1?i=1N?log(j?exp(logiti,j?)exp(logiti,yi??)?)??
其中:

  • N = 3 N=3 N=3: 是批量大小。
  • l o g i t i , j logit_{i,j} logiti,j?: 是樣本 i i i對類別 j j j的預測分數。
  • y i y_i yi?: 樣本 i i i?? 的真實類別索引。

c)、逐行計算softmax概率和交叉熵損失

step 1:第一行 l o g i t s = [ 1.5 0.3 2.1 ] logits = \begin{bmatrix} 1.5 & 0.3 & 2.1 \end{bmatrix} logits=[1.5?0.3?2.1?]?,真實標簽 = 2

  • 計算softmax:

    • 計算每個分數的指數值:

    e x p ( 1.5 ) ≈ 4.481 , e x p ( 0.3 ) ≈ 1.350 , e x p ( 2.1 ) ≈ 8.165 \begin{equation} exp(1.5) \approx 4.481, \quad exp(0.3) \approx 1.350, \quad exp(2.1) \approx 8.165 \end{equation} exp(1.5)4.481,exp(0.3)1.350,exp(2.1)8.165??

    • 求和

    s u m = 4.481 + 1.350 + 8.165 ≈ 13.996 \begin{equation} sum = 4.481 + 1.350 + 8.165 \approx 13.996 \end{equation} sum=4.481+1.350+8.16513.996??

    • 計算每個類別的概率

    P ( 0 ) = 4.481 13.996 ≈ 0.32 , P ( 1 ) = 1.350 13.996 ≈ 0.096 , P ( 2 ) = 8.165 13.996 ≈ 0.583 \begin{equation} P(0) = \dfrac{4.481}{13.996} \approx 0.32,\quad P(1) = \dfrac{1.350}{13.996} \approx 0.096,\quad P(2) = \dfrac{8.165}{13.996} \approx 0.583 \end{equation} P(0)=13.9964.481?0.32,P(1)=13.9961.350?0.096,P(2)=13.9968.165?0.583??

  • 取真實類別2的概率:

P ( y = 2 ) = 0.583 \begin{equation} P(y=2) = 0.583 \end{equation} P(y=2)=0.583??

  • 計算損失:

L o s s 1 = ? l o g ( 0.583 ) ≈ 0.540 \begin{equation} Loss_1 = -log(0.583) \approx 0.540 \end{equation} Loss1?=?log(0.583)0.540??

step 2:第二行 l o g i t s = [ 2.0 1.0 0.1 ] logits = \begin{bmatrix} 2.0 & 1.0 & 0.1 \end{bmatrix} logits=[2.0?1.0?0.1?]?,真實標簽 = 0

  • 計算softmax:

    • 計算每個分數的指數值:

    e x p ( 2.0 ) ≈ 7.389 , e x p ( 1.0 ) ≈ 2.718 , e x p ( 0.1 ) ≈ 1.105 \begin{equation} exp(2.0) \approx 7.389, \quad exp(1.0) \approx 2.718, \quad exp(0.1) \approx 1.105 \end{equation} exp(2.0)7.389,exp(1.0)2.718,exp(0.1)1.105??

    • 求和

    s u m = 7.389 + 2.718 + 1.105 ≈ 11.212 \begin{equation} sum = 7.389 + 2.718 + 1.105 \approx 11.212 \end{equation} sum=7.389+2.718+1.10511.212??

    • 計算每個類別的概率

    P ( 0 ) = 7.389 11.212 ≈ 0.659 , P ( 1 ) = 2.718 11.212 ≈ 0.242 , P ( 2 ) = 1.105 11.212 ≈ 0.099 \begin{equation} P(0) = \dfrac{7.389}{11.212} \approx 0.659,\quad P(1) = \dfrac{2.718}{11.212} \approx 0.242,\quad P(2) = \dfrac{1.105}{11.212} \approx 0.099 \end{equation} P(0)=11.2127.389?0.659,P(1)=11.2122.718?0.242,P(2)=11.2121.105?0.099??

  • 取真實類別0的概率:

P ( y = 0 ) = 0.659 \begin{equation} P(y=0) = 0.659 \end{equation} P(y=0)=0.659??

  • 計算損失:

L o s s 2 = ? l o g ( 0.659 ) ≈ 0.417 \begin{equation} Loss_2 = -log(0.659) \approx 0.417 \end{equation} Loss2?=?log(0.659)0.417??

step 3:第二行 l o g i t s = [ 0.1 2.2 1.0 ] logits = \begin{bmatrix} 0.1 & 2.2 & 1.0 \end{bmatrix} logits=[0.1?2.2?1.0?]?,真實標簽 = 1

  • 計算softmax:

    • 計算每個分數的指數值:

    e x p ( 0.1 ) ≈ 1.105 , e x p ( 2.2 ) ≈ 9.025 , e x p ( 1.0 ) ≈ 2.718 \begin{equation} exp(0.1) \approx 1.105, \quad exp(2.2) \approx 9.025, \quad exp(1.0) \approx 2.718 \end{equation} exp(0.1)1.105,exp(2.2)9.025,exp(1.0)2.718??

    • 求和

    s u m = 1.105 + 9.025 + 2.718 ≈ 12.848 \begin{equation} sum = 1.105 + 9.025 + 2.718 \approx 12.848 \end{equation} sum=1.105+9.025+2.71812.848??

    • 計算每個類別的概率

    P ( 0 ) = 1.105 12.848 ≈ 0.086 , P ( 1 ) = 9.025 12.848 ≈ 0.703 , P ( 2 ) = 2.718 12.848 ≈ 0.211 \begin{equation} P(0) = \dfrac{1.105}{12.848} \approx 0.086,\quad P(1) = \dfrac{9.025}{12.848} \approx 0.703,\quad P(2) = \dfrac{2.718}{12.848} \approx 0.211 \end{equation} P(0)=12.8481.105?0.086,P(1)=12.8489.025?0.703,P(2)=12.8482.718?0.211??

  • 取真實類別1的概率:

P ( y = 1 ) = 0.703 \begin{equation} P(y=1) = 0.703 \end{equation} P(y=1)=0.703??

  • 計算損失:

L o s s 3 = ? l o g ( 0.703 ) ≈ 0.353 \begin{equation} Loss_3 = -log(0.703) \approx 0.353 \end{equation} Loss3?=?log(0.703)0.353??

d)、批量損失

將每個樣本的損失平均:
L o s s = L o s s 1 + L o s s 2 + L o s s 3 3 = 0.540 + 0.417 + 0.353 3 ≈ 0.437 \begin{equation} Loss = \dfrac{Loss_1 + Loss_2 + Loss_3}{3} = \dfrac{0.540 + 0.417 + 0.353}{3} \approx 0.437 \end{equation} Loss=3Loss1?+Loss2?+Loss3??=30.540+0.417+0.353?0.437??
3、帶權重的交叉熵

在某些情況下,類別分布不平衡,可以為不同類別設置權重:

weights = torch.tensor([1.0, 2.0, 3.0])  # 類別權重
criterion = nn.CrossEntropyLoss(weight=weights)loss = criterion(logits, labels)
print("Weighted CrossEntropyLoss:", loss.item())

4、示例:在神經網絡中的應用

import torch
import torch.nn as nn
import torch.optim as optim# 定義一個簡單的神經網絡
class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc = nn.Linear(4, 3)  # 輸入 4 維特征,輸出 3 類def forward(self, x):return self.fc(x)# 模型、損失函數和優化器
model = SimpleNet()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)# 輸入數據和標簽
inputs = torch.tensor([[0.5, 1.2, -1.3, 0.8], [0.3, -0.7, 1.0, 1.5]])  # Batch size = 2
labels = torch.tensor([0, 2])  # 兩個樣本對應的真實類別# 前向傳播
outputs = model(inputs)# 計算損失
loss = criterion(outputs, labels)
print("Loss:", loss.item())# 反向傳播和優化
loss.backward()
optimizer.step()

5、總結

  • 交叉熵損失函數用于度量預測分布與真實分布之間的差異,是分類問題中的核心工具。

  • 在 PyTorch 中,torch.nn.CrossEntropyLoss 結合了 softmax 和交叉熵計算,使用簡單且高效。

  • 可以通過參數調整(如權重)來適應不平衡數據集。

整合的代碼

import torch
import torch.nn as nn
import torch.optim as optimdef single_instance_CrossEntropyLoss():# 模型的輸出 logits 和真實標簽logits = torch.tensor([[2.0, 1.0, 0.1]])  # 未經過 softmax 的輸出labels = torch.tensor([0])  # 真實標簽(類別索引)# 定義交叉熵損失函數criterion = nn.CrossEntropyLoss()# 計算損失loss = criterion(logits, labels)print("CrossEntropyLoss:", loss.item())def multi_instance_CrossEntropyLoss():logits = torch.tensor([[1.5, 0.3, 2.1], [2.0, 1.0, 0.1], [0.1, 2.2, 1.0]])  # Batch size = 3labels = torch.tensor([2, 0, 1])  # Batch size = 3# 定義交叉熵損失函數criterion = nn.CrossEntropyLoss()# 計算損失loss = criterion(logits, labels)print("CrossEntropyLoss:", loss.item())# 定義一個簡單的神經網絡
class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc = nn.Linear(4, 3)  # 輸入 4 維特征,輸出 3 類def forward(self, x):return self.fc(x)def apply_deepLearning_CrossEntropyLoss():# 模型、損失函數和優化器model = SimpleNet()criterion = nn.CrossEntropyLoss()optimizer = optim.Adam(model.parameters(), lr=0.01)# 輸入數據和標簽inputs = torch.tensor([[0.5, 1.2, -1.3, 0.8], [0.3, -0.7, 1.0, 1.5]])  # Batch size = 2labels = torch.tensor([0, 2])  # 兩個樣本對應的真實類別# 前向傳播outputs = model(inputs)# 計算損失loss = criterion(outputs, labels)print("Loss:", loss.item())# 反向傳播和優化loss.backward()optimizer.step()if __name__ == "__main__":print("*" * 30)single_instance_CrossEntropyLoss()multi_instance_CrossEntropyLoss()apply_deepLearning_CrossEntropyLoss()

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

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

相關文章

操作系統:死鎖與饑餓

目錄 死鎖概念 饑餓與餓死概念 饑餓和死鎖對比 死鎖類型 死鎖條件(Coffman條件) 死鎖恢復方法 死鎖避免 安全狀態與安全進程序列: 銀行家算法: 死鎖檢測時機(了解): 死鎖檢測 死鎖案…

Prisoner’s Dilemma

囚徒困境博弈論解析 什么是囚徒困境? 囚徒困境(Prisoner’s Dilemma)是博弈論中的一個經典模型,用來分析兩名玩家在非合作環境下的決策行為。 其核心在于玩家既可以選擇合作也可以選擇背叛,而最終的結果取決于雙方的…

RPO: Read-only Prompt Optimization for Vision-Language Few-shot Learning

文章匯總 想解決的問題對CoOp的改進CoCoOp盡管提升了性能,但卻增加了方差(模型的準確率波動性較大)。 模型的框架一眼看去,跟maple很像(maple跟這篇文章都是2023年發表的),但maple的視覺提示是由文本提示經過全連接轉換而來的,而這里是文本提示和視覺提示是獨立的。另外m…

『MySQL 實戰 45 講』24 - MySQL是怎么保證主備一致的?

MySQL是怎么保證主備一致的? MySQL 主備的基本原理 基本的主備切換流程 狀態 1:客戶端的讀寫都直接訪問節點 A,而節點 B 是 A 的備庫狀態 2:切換時,讀寫訪問的都是節點 B,而節點 A 是 B 的備庫注意&…

自薦一部IT方案架構師回憶錄

作者本人畢業于一個不知名大專院校,所讀專業計算機科學技術。2009年開始IT職業生涯,至今工作15年。擅長TSQL/Shell/linux等技術,曾經就職于超萬人大型集團、國內頂級云廠商、央國企公司。參與過運營商大數據平臺、大型智慧城市ICT、云計算、人…

python數據分析之爬蟲基礎:selenium詳細講解

目錄 1、selenium介紹 2、selenium的作用: 3、配置瀏覽器驅動環境及selenium安裝 4、selenium基本語法 4.1、selenium元素的定位 4.2、selenium元素的信息 4.3、selenium元素的交互 5、Phantomjs介紹 6、chrome handless模式 1、selenium介紹 (1…

【數據結構——查找】順序查找(頭歌實踐教學平臺習題)【合集】

目錄😋 任務描述 相關知識 測試說明 我的通關代碼: 測試結果: 任務描述 本關任務:實現順序查找的算法。 相關知識 為了完成本關任務,你需要掌握:1.根據輸入數據建立順序表,2.順序表的輸出,…

光伏電站建設成本利潤估算

?截至2024年9月底,全國光伏發電裝機容量達到7.7億千瓦,同比增長48.4%。其中集中式光伏4.3億千瓦,分布式光伏3.4億千瓦。2024年前三季度,全國光伏發電量6359億千瓦時,同比增長45.5%。全國光伏發電利用率97.2%,同比下降1.1個百分點.早在今年2月份,中國光伏行業協會名譽理…

create-react-app react19 搭建項目報錯

報錯截圖 此時運行會報錯: 解決方法: 1.根據提示安裝依賴法 執行npm i web-vitals然后重新允許 2.刪除文件法 在index.js中刪除對報錯文件的引入,刪除報錯文件

scala的集合性能2

可變集合\n可變集合允許在原地修改數據,適合需要頻繁更新的場景。Scala 的可變集合包括 ArrayBuffer、HashSet和HashMap。 1. ArrayBuffer\nArrayBuffer 是一個可變的動態數組,提供高效的隨機訪問和添加操作。 import scala.collection.mutable.ArrayB…

【Ubuntu】腳本自動化控制終端填充

1.sh腳本文件控制終端寫入命令 在SLAM算法中,每次啟動vins都需要起很多終端,盡管使用了超級終端Terminator可以終端內劃分看起來更加便捷,但是每次起算法的命令還是要自己輸入,已經被麻煩了兩年了,今天突然想寫寫一個…

【自學】Vues基礎

學習目錄 Vues基礎本地應用網絡應用綜合應用 工具的準備 我個人比較喜歡使用HTMLDROWNER,學習資料推薦使用VC,僅供選擇吧 前置知識 HTMLCSSJSAJAX:這個是學習資料博主推薦的 個人感覺認真學好HTMLCSSJS理解vues基礎很容易上手 官方網址…

Scratch 消滅字母小游戲

背景 最近嘗試一邊自學Scratch,一邊嘗試教給小孩,看他打字時在鍵盤上亂打一氣,想起來自己小時候玩過的學習機打字母游戲,就想給他下載一個。結果網上看到的代碼,要么質量太差(有26個字母就要寫 26 個判斷&…

python調用matlab函數(內置 + 自定義) —— 安裝matlab.engine

文章目錄 一、簡介二、安裝matlab.engine2.1、基于 CMD 安裝2.2、基于 MATLAB 安裝(不建議) 三、python調用matlab函數(內置 自定義) 一、簡介 matlab.engine(MATLAB Engine API for Python):…

pytroch環境安裝-pycharm

環境介紹 安裝pycharm 官網下載即可,我這里已經安裝,就不演示了 安裝anaconda 【官網鏈接】點擊下載 注意這一步選擇just me 這一步全部勾上 打開 anaconda Prompt 輸入conda create -n pytorch python3.8 命令解釋:創建一個叫pytorch&…

Photoshop提示錯誤彈窗dll缺失是什么原因?要怎么解決?

Photoshop提示錯誤彈窗“DLL缺失”:原因分析與解決方案 在創意設計與圖像處理領域,Photoshop無疑是眾多專業人士和愛好者的首選工具。然而,在使用Photoshop的過程中,有時會遇到一些令人頭疼的問題,比如突然彈出的錯誤…

自己總結:selenium高階知識

全篇大概10000字(含代碼),建議閱讀時間30min 一、等待機制 如果有一些內容是通過Ajax加載的內容,那就需要等待內容加載完畢才能進行下一步操作。 為了避免人為操作等待,會遇到的問題, selenium將等待轉換…

上海亞商投顧:創業板指震蕩調整 機器人概念股再度爆發

上海亞商投顧前言:無懼大盤漲跌,解密龍虎榜資金,跟蹤一線游資和機構資金動向,識別短期熱點和強勢個股。 一.市場情緒 滬指昨日沖高回落,深成指、創業板指盤中跌超1%,尾盤跌幅有所收窄。機器人概念股逆勢爆…

(Linux)CentOS7離線安裝MinIO(超詳細)

目錄 前言1. 下載2. 安裝VMware3. 安裝CentOS4. 離線安裝MinIO4.1. ssh工具連接CentOS4.2. 上傳MinIO離線包4.2.1 創建data目錄4.2.2 上傳RPM包到data目錄4.2.3 安裝RPM包4.2.4 創建MinIO數據目錄4.2.5 配置 MinIO 服務4.2.6 啟動 MinIO4.2.7 開放端口 4.2.8 訪問MinIO 創作不易…

【JavaWeb后端學習筆記】Maven項目管理

Maven 1、分模塊設計2、Maven繼承2.1 繼承關系2.2 版本鎖定 3、Maven聚合4、聚合與繼承的關系 1、分模塊設計 如果一個項目中含有大量的功能模塊。可以考慮將這些功能分模塊設計,逐一進行開發。例如將公共類可以定義在一個項目中,將通用工具類也放在一個…