【大模型微調系列-03】 大模型數學基礎直觀入門

【大模型微調系列-03】 大模型數學基礎直觀入門

🎯 本章目標:不要害怕數學!我們將通過可視化和簡單代碼,讓你像"看電影"一樣理解深度學習的數學原理。記住,深度學習的數學其實就是"讓計算機學會調整參數"的藝術。

3.1 理論講解:深度學習的數學"積木塊"

3.1.1 張量與矩陣——數據的"容器"

想象一下,你在整理衣柜。標量就像一件衣服,向量就像一排衣服,矩陣就像一個衣柜的所有衣服,而張量就像整個房間所有衣柜的衣服。在深度學習中,張量就是我們存儲和處理數據的"多維容器"。

為什么需要張量?

假設你要處理一張彩色圖片:

  • 一個像素的亮度值 → 標量(0維)
  • 一行像素 → 向量(1維)
  • 一張灰度圖 → 矩陣(2維)
  • 一張彩色圖(RGB三通道)→ 3維張量
  • 100張彩色圖一起處理 → 4維張量
標量
單個數字
溫度: 25度C
向量
一維數組
一周溫度
矩陣
二維表格
多城市溫度表
3D張量
立體數據
RGB圖像
4D張量
批量數據
100張圖片
張量的關鍵屬性
屬性含義生活類比
形狀(shape)各維度的大小衣柜的長×寬×高
數據類型(dtype)存儲的數字類型整數價格 vs 小數重量
設備(device)存儲位置倉庫(CPU) vs 快遞站(GPU)
import torch
import numpy as np# 從熟悉的Python列表開始
temperature = 25.5  # 標量
week_temps = [25.5, 26.1, 24.8, 25.9, 26.5, 27.0, 26.2]  # 向量# 轉換為PyTorch張量
tensor_scalar = torch.tensor(temperature)
tensor_vector = torch.tensor(week_temps)print(f"標量張量: {tensor_scalar}, 形狀: {tensor_scalar.shape}")
print(f"向量張量: {tensor_vector}, 形狀: {tensor_vector.shape}")# 創建一個矩陣(多個城市的周溫度)
cities_temps = torch.tensor([[25.5, 26.1, 24.8, 25.9, 26.5, 27.0, 26.2],  # 北京[28.5, 29.1, 28.8, 29.9, 30.5, 31.0, 30.2],  # 上海[22.5, 23.1, 22.8, 23.9, 24.5, 25.0, 24.2],  # 成都
])
print(f"矩陣形狀: {cities_temps.shape}")  # [3, 7] = 3個城市,7天
張量操作的直觀理解
原始張量
shape: 2,3,4
reshape操作
新張量
shape: 6,4
新張量
shape: 2,12
新張量
shape: 24
為什么能變形?
總元素數不變
2*3*4 = 24

關鍵概念:張量就像橡皮泥,只要總體積(元素總數)不變,就可以揉成不同形狀。這在神經網絡中非常重要,因為不同層需要不同形狀的輸入。

3.1.2 線性變換與權重矩陣——神經網絡的"調味配方"

想象你在調制雞尾酒。每種基酒的比例(權重)決定了最終的口味。神經網絡中的權重矩陣就像這個配方,它決定了輸入如何變成輸出。

矩陣乘法的幾何意義

矩陣乘法本質上是對空間的變換。想象你有一張照片,矩陣乘法可以:

  • 縮放:讓照片變大或變小
  • 旋轉:讓照片轉動角度
  • 投影:把3D物體投影到2D平面
輸出空間
變換矩陣
輸入空間
矩陣乘法
y = Wx
輸出向量
-1,4
權重矩陣W
旋轉+縮放
輸入向量
2,3
神經網絡中的線性變換

在神經網絡中,每一層都在做這樣的事情:

輸出 = 權重矩陣 × 輸入 + 偏置
y = Wx + b

這就像:

  • W(權重):每個特征的重要程度
  • x(輸入):原始數據
  • b(偏置):基礎分數(即使輸入為0也有的輸出)
import torch
import matplotlib.pyplot as plt# 創建一個簡單的線性變換
input_features = 3  # 輸入特征數(如:房屋面積、臥室數、位置評分)
output_features = 2  # 輸出特征數(如:價格預測、投資價值)# 權重矩陣:決定每個輸入特征如何影響輸出
W = torch.tensor([[0.5, 2.0, -1.0],   # 第一個輸出的權重[1.0, -0.5, 3.0]    # 第二個輸出的權重
])# 輸入數據
x = torch.tensor([100.0, 3.0, 8.0])  # [面積, 臥室數, 位置評分]# 線性變換
y = torch.matmul(W, x)
print(f"輸入: {x}")
print(f"輸出: {y}")
print(f"解釋: 第一個輸出 = 0.5×100 + 2.0×3 + (-1.0)×8 = {y[0]}")

3.1.3 導數與梯度——找到"下山"的方向

想象你蒙著眼睛站在山坡上,想要走到山谷(最低點)。你能做的就是:

  1. 感受腳下的坡度(導數)
  2. 判斷哪個方向最陡(梯度)
  3. 朝著下坡方向走一小步(梯度下降)
導數:變化率的度量

導數告訴我們"如果參數變化一點點,結果會變化多少"。

當前位置
參數w=2
損失L=4
計算導數
導數=4
意味著:
w增加1
L約增加4
w減少1
L約減少4
所以應該
減小w!
梯度:多維空間的"指南針"

當有多個參數時,梯度就像一個指南針,指向函數增長最快的方向。我們要朝相反方向走(負梯度方向)才能找到最小值。

# 可視化梯度下降過程
import numpy as np
import matplotlib.pyplot as plt# 定義一個簡單的損失函數(碗狀)
def loss_function(w):return w**2# 計算導數
def gradient(w):return 2*w# 梯度下降過程
w = 5.0  # 初始位置
learning_rate = 0.1
history = [w]for step in range(20):grad = gradient(w)w = w - learning_rate * grad  # 更新規則history.append(w)if step % 5 == 0:print(f"步驟 {step}: w={w:.3f}, 梯度={grad:.3f}, 損失={loss_function(w):.3f}")
鏈式法則:復合函數的"多米諾骨牌"

深度網絡就像多層嵌套的函數。鏈式法則告訴我們如何計算最內層參數對最終輸出的影響。

dL/dy
dL/dz2
dL/da1
dL/dz1
dL/dW1
輸入x
第一層
z1=W1x
激活
a1=ReLU z1
第二層
z2=W2a1
輸出
y=softmax z2
損失L

就像推倒多米諾骨牌,每一塊倒下都會影響下一塊。鏈式法則讓我們能夠計算第一塊骨牌(輸入層參數)對最后一塊(損失函數)的影響。

3.1.4 損失函數與優化——模型的"成績單"

損失函數就像考試分數,告訴模型"你錯了多少"。不同類型的問題需要不同的評分標準。

常見損失函數對比
損失函數類型
回歸問題
分類問題
MSE均方誤差
預測值與真實值
差距的平方
MAE平均絕對誤差
預測值與真實值
差距的絕對值
交叉熵
預測概率分布與
真實分布的差異
Hinge Loss
SVM分類
間隔最大化
MSE vs 交叉熵的直觀理解

MSE(均方誤差):適合連續值預測

  • 預測房價:預測30萬,實際32萬 → 誤差=(32-30)2=4
  • 特點:對大誤差懲罰更重(平方放大)

交叉熵:適合分類問題

  • 預測是貓的概率:0.9,實際是貓 → 損失=-log(0.9)≈0.1(很小)
  • 預測是貓的概率:0.1,實際是貓 → 損失=-log(0.1)≈2.3(很大)
  • 特點:對錯誤但很自信的預測懲罰極重
import torch
import torch.nn.functional as F# MSE示例:預測溫度
predicted_temp = torch.tensor([25.0, 26.5, 24.8])
actual_temp = torch.tensor([24.5, 27.0, 24.0])
mse_loss = F.mse_loss(predicted_temp, actual_temp)
print(f"MSE損失: {mse_loss:.4f}")# 交叉熵示例:分類動物(貓、狗、鳥)
# 模型輸出的原始分數(logits)
logits = torch.tensor([[2.0, 1.0, 0.1]])  # 認為是貓的可能性最大
target = torch.tensor([0])  # 真實標簽:0代表貓
ce_loss = F.cross_entropy(logits, target)
print(f"交叉熵損失: {ce_loss:.4f}")# 轉換為概率看看
probs = F.softmax(logits, dim=1)
print(f"預測概率: 貓={probs[0,0]:.2f}, 狗={probs[0,1]:.2f}, 鳥={probs[0,2]:.2f}")
優化器:如何"下山"

優化器決定了我們如何利用梯度來更新參數。就像下山有不同策略:

SGD
隨機梯度下降
最簡單
沿梯度方向走
Momentum
動量
考慮慣性
像滾雪球
Adam
自適應
自動調節步長
智能導航
  • SGD:老老實實按梯度走,可能很慢
  • Momentum:考慮之前的運動方向,能沖過小坑
  • Adam:自適應調整每個參數的學習率,通常是最佳選擇

3.1.5 Softmax與概率——把分數變成概率

Softmax就像"分蛋糕"——把模型的原始輸出分數轉換成和為1的概率分布。

為什么需要Softmax?

模型的原始輸出可能是任意數字:

  • 貓:5.2
  • 狗:2.1
  • 鳥:-1.3

這些數字沒有直觀含義。Softmax將它們轉換為概率:

  • 貓:92%
  • 狗:7%
  • 鳥:1%

現在我們能清楚地說:“模型認為這92%是貓”。

原始分數
logits
指數化
e^x
歸一化
除以總和
概率分布
和為1
5.2, 2.1, -1.3
181.3, 8.2, 0.3
181.3/189.8=0.955
8.2/189.8=0.043
0.3/189.8=0.002
95.5%, 4.3%, 0.2%
溫度參數:控制模型的"自信度"

溫度(Temperature)就像調節模型的"性格":

  • 低溫(T<1):讓模型更自信、更確定
  • 高溫(T>1):讓模型更保守、更均勻
import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt# 原始分數
logits = torch.tensor([3.0, 1.0, 0.2])# 不同溫度下的概率分布
temperatures = [0.5, 1.0, 2.0, 5.0]
fig, axes = plt.subplots(1, 4, figsize=(12, 3))for idx, temp in enumerate(temperatures):probs = F.softmax(logits / temp, dim=0)axes[idx].bar(['類別A', '類別B', '類別C'], probs.numpy())axes[idx].set_title(f'溫度={temp}')axes[idx].set_ylim([0, 1])plt.suptitle('溫度對Softmax概率分布的影響')
plt.tight_layout()
# plt.show()  # 如果在notebook中運行print("溫度越低,分布越尖銳(更確定)")
print("溫度越高,分布越平滑(更不確定)")

3.1.6 反向傳播流程——誤差的"責任追溯"

反向傳播就像偵探破案,從犯罪現場(輸出誤差)開始,一步步追溯每個嫌疑人(參數)的責任。

完整的前向+反向流程
參數更新
反向傳播
前向傳播
W2 = W2 - lr*dL/dW2
W1 = W1 - lr*dL/dW1
損失對輸出梯度
dL/dy
輸出對h2梯度
dL/dh2
h2對W2梯度
dL/dW2
h2對a1梯度
dL/da1
a1對h1梯度
dL/dh1
h1對W1梯度
dL/dW1
第一層
h1 = W1*x + b1
輸入數據 x
激活函數
a1 = ReLU h1
第二層
h2 = W2*a1 + b2
輸出
y = Softmax h2
計算損失
L = CrossEntropy y,target
梯度的反向流動

想象水從山頂(損失函數)流下來:

  1. 水流分叉:遇到加法節點,梯度復制
  2. 水流匯聚:遇到乘法節點,梯度相乘
  3. 水流調節:遇到激活函數,梯度被調節

每個參數受到的"水壓"(梯度)決定了它需要調整多少。

# 簡單的反向傳播示例
import torch# 構建一個簡單的計算圖
x = torch.tensor(2.0, requires_grad=True)
w = torch.tensor(3.0, requires_grad=True)
b = torch.tensor(1.0, requires_grad=True)# 前向傳播
y = w * x + b  # y = 3*2 + 1 = 7
z = y ** 2     # z = 7^2 = 49
loss = z       # 損失就是z# 反向傳播
loss.backward()print(f"前向計算: x={x.item()}, w={w.item()}, b={b.item()}")
print(f"中間結果: y={y.item()}, z={z.item()}")
print(f"\n梯度(責任分配):")
print(f"x的梯度: {x.grad.item()} (x改變1,loss改變{x.grad.item()})")
print(f"w的梯度: {w.grad.item()} (w改變1,loss改變{w.grad.item()})")
print(f"b的梯度: {b.grad.item()} (b改變1,loss改變{b.grad.item()})")
梯度消失和爆炸

在深層網絡中,梯度可能會:

  • 消失:梯度越傳越小,最后變成0(像電話傳話,傳到最后聽不清)
  • 爆炸:梯度越傳越大,最后變成無窮大(像雪崩,越滾越大)

解決方案:

  • 使用合適的激活函數(ReLU而非Sigmoid)
  • 批歸一化(Batch Normalization)
  • 梯度裁剪(Gradient Clipping)
  • 殘差連接(ResNet的核心思想)

3.2 實操案例

實操1:張量操作實戰

import torch
import numpy as np# === 1. 創建張量的多種方式 ===
print("=== 張量創建方法 ===")# 從Python列表
tensor_from_list = torch.tensor([1, 2, 3, 4])
print(f"從列表: {tensor_from_list}")# 全零張量
zeros = torch.zeros(2, 3)
print(f"全零: \n{zeros}")# 全一張量
ones = torch.ones(2, 3)
print(f"全一: \n{ones}")# 隨機張量
random = torch.randn(2, 3)  # 標準正態分布
print(f"隨機: \n{random}")# 等差數列
arange = torch.arange(0, 10, 2)  # 0到10,步長2
print(f"等差: {arange}")# === 2. 張量形狀操作 ===
print("\n=== 形狀操作 ===")x = torch.randn(4, 3)
print(f"原始形狀: {x.shape}")# reshape/view
x_reshaped = x.reshape(2, 6)
print(f"reshape后: {x_reshaped.shape}")# squeeze去除維度為1的軸
x_with_1 = torch.randn(1, 3, 1, 4)
x_squeezed = x_with_1.squeeze()
print(f"squeeze前: {x_with_1.shape}, squeeze后: {x_squeezed.shape}")# unsqueeze添加維度
x_expanded = x.unsqueeze(0)  # 在第0維添加
print(f"unsqueeze后: {x_expanded.shape}")# === 3. 張量運算 ===
print("\n=== 基本運算 ===")a = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)
b = torch.tensor([[5, 6], [7, 8]], dtype=torch.float32)print(f"加法: \n{a + b}")
print(f"逐元素乘法: \n{a * b}")
print(f"矩陣乘法: \n{torch.matmul(a, b)}")# === 4. 自動微分預覽 ===
print("\n=== 自動微分 ===")x = torch.tensor(2.0, requires_grad=True)
y = x ** 2 + 3 * x + 1
y.backward()
print(f"y = x^2 + 3x + 1, 當x=2時")
print(f"y的值: {y.item()}")
print(f"dy/dx: {x.grad.item()}")

實操2:構建迷你神經網絡

import torch
import torch.nn as nn
import torch.nn.functional as F
import matplotlib.pyplot as plt# 定義一個簡單的兩層網絡
class MiniNetwork(nn.Module):def __init__(self, input_size, hidden_size, output_size):super().__init__()self.layer1 = nn.Linear(input_size, hidden_size)self.layer2 = nn.Linear(hidden_size, output_size)def forward(self, x):# 前向傳播x = self.layer1(x)x = F.relu(x)  # 激活函數x = self.layer2(x)return x# 創建網絡
net = MiniNetwork(input_size=3, hidden_size=4, output_size=2)# 生成模擬數據
batch_size = 5
x = torch.randn(batch_size, 3)
target = torch.randint(0, 2, (batch_size,))# 前向傳播
output = net(x)
print(f"輸入形狀: {x.shape}")
print(f"輸出形狀: {output.shape}")# 計算損失
loss = F.cross_entropy(output, target)
print(f"損失值: {loss.item():.4f}")# 反向傳播
loss.backward()# 查看梯度
for name, param in net.named_parameters():if param.grad is not None:print(f"{name}的梯度形狀: {param.grad.shape}")

實操3:可視化梯度下降

import numpy as np
import matplotlib.pyplot as plt# 定義一個簡單的二次函數
def f(x):return (x - 3) ** 2 + 1def gradient_f(x):return 2 * (x - 3)# 梯度下降
x_history = []
loss_history = []x = -2.0  # 起始點
learning_rate = 0.1
n_steps = 30for i in range(n_steps):x_history.append(x)loss_history.append(f(x))# 計算梯度并更新grad = gradient_f(x)x = x - learning_rate * grad# 可視化
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))# 左圖:函數曲線和優化路徑
x_range = np.linspace(-3, 8, 100)
y_range = f(x_range)ax1.plot(x_range, y_range, 'b-', label='f(x)=(x-3)2+1')
ax1.plot(x_history, loss_history, 'ro-', markersize=4, label='優化路徑')
ax1.axvline(x=3, color='g', linestyle='--', label='最優解 x=3')
ax1.set_xlabel('參數 x')
ax1.set_ylabel('損失值')
ax1.set_title('梯度下降過程')
ax1.legend()
ax1.grid(True, alpha=0.3)# 右圖:損失值變化
ax2.plot(range(n_steps), loss_history, 'b-o', markersize=4)
ax2.set_xlabel('迭代步數')
ax2.set_ylabel('損失值')
ax2.set_title('損失值隨迭代下降')
ax2.grid(True, alpha=0.3)plt.tight_layout()
# plt.show()print(f"起始點: x={x_history[0]:.2f}, 損失={loss_history[0]:.2f}")
print(f"終止點: x={x_history[-1]:.2f}, 損失={loss_history[-1]:.2f}")
print(f"最優解: x=3.00, 損失=1.00")

實操4:Softmax溫度實驗

import torch
import torch.nn.functional as Fdef apply_temperature_softmax(logits, temperature):"""應用溫度調節的softmax"""return F.softmax(logits / temperature, dim=0)# 模擬模型輸出
logits = torch.tensor([4.0, 2.0, 1.0, 0.5, 0.1])
classes = ['貓', '狗', '鳥', '魚', '兔']print("原始分數(logits):", logits.numpy())
print("\n不同溫度下的概率分布:")
print("-" * 50)temperatures = [0.5, 1.0, 2.0, 5.0]for temp in temperatures:probs = apply_temperature_softmax(logits, temp)print(f"\n溫度 T={temp}:")for cls, prob in zip(classes, probs):bar = '█' * int(prob * 50)print(f"  {cls}: {prob:.3f} {bar}")# 計算熵(不確定性度量)entropy = -torch.sum(probs * torch.log(probs + 1e-10))print(f"  熵值: {entropy:.3f} (越大越不確定)")

3.3 章節總結

核心要點思維導圖

mindmaproot((深度學習數學基礎))張量數據的容器多維數組形狀操作線性變換矩陣乘法權重和偏置空間變換梯度導數方向導數鏈式法則優化損失函數梯度下降優化器選擇概率Softmax溫度調節概率分布反向傳播誤差傳遞參數更新梯度流動

與實際深度學習的聯系

本章學習的數學概念在實際深度學習中的應用:

  1. 張量操作 → 數據預處理、批處理、特征工程
  2. 線性變換 → 全連接層、卷積層的基礎
  3. 梯度計算 → 模型訓練的核心機制
  4. 損失函數 → 評估模型性能、指導優化方向
  5. Softmax → 分類任務的概率輸出
  6. 反向傳播 → 自動計算所有參數的梯度

重要提示

? 必須掌握

  • 張量的基本概念和形狀操作
  • 梯度下降的直觀理解
  • 損失函數的作用
  • 前向傳播和反向傳播的流程

📚 了解即可

  • 具體的數學推導過程
  • 優化器的內部算法細節
  • 梯度消失/爆炸的數學原因

記住:深度學習的數學不是障礙,而是工具。就像開車不需要理解發動機的每個零件,使用深度學習也不需要證明每個數學定理。重要的是理解概念,知道什么時候用什么工具!

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

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

相關文章

科技賦能千年養生丨七彩喜艾灸機器人,讓傳統智慧觸手可及

傳統艾灸養生效果顯著&#xff0c;卻常因煙霧繚繞、操作繁瑣、安全隱患等問題令人望而卻步。如今&#xff0c;七彩喜艾灸機器人以創新科技破解痛點&#xff0c;將千年艾灸智慧與現代智能深度融合&#xff0c;讓養生變得簡單、安全、高效&#xff0c;為大眾開啟“無負擔”的艾灸…

【web站點安全開發】任務2:HTML5核心特性與元素詳解

目錄 一、HTML元素 1、行內元素、塊元素、行內塊元素 2、替換元素和非替換元素 二、HTML5新增特性 1、語義化標簽&#xff1a;提升頁面結構化與可讀性 2、原生多媒體支持&#xff1a;擺脫插件依賴 3、表單增強&#xff1a;提升交互與驗證能力 4、Canvas 與 WebGL&#…

Notepad++插件開發實戰:從零打造效率工具

通過定制插件提升文本處理效率300%?? 一、插件開發核心價值?解決效率瓶頸的終極方案??定制化工作流?深度集成編輯器功能&#xff08;文檔訪問、選區操作、語法解析&#xff09;自動化重復操作&#xff08;批量替換、格式轉換、數據提取&#xff09;案例&#xff1a;法律文…

微服務單元測試組件(附源碼)

背景 微服務的調試&#xff0c;哪怕是簡單問題&#xff0c;需要啟動9個服務&#xff0c;ui/nginx 網關 應用 auth 基礎數據服務 redis nacos 平臺服務 &#xff0c;效率差得不行&#xff0c;準備開發一個支持微服務環境的單元測試組件&#xff0c; 組件解決3個問題&#xff1a…

【LeetCode 熱題 100】55. 跳躍游戲

Problem: 55. 跳躍游戲 給你一個非負整數數組 nums &#xff0c;你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個下標&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 文…

Java-JVM是什么JVM的類加載機制

一.JVM是什么1.jvm是java虛擬機&#xff0c;是java程序運行的基礎環境2.jvm運行的是java源代碼經過編譯后的class文件&#xff0c;這些class文件經過jvm負責解釋或即時編譯為對應平臺的機器碼并執行3.class文件也可以通過其他【jvm languages】經過編譯后得到&#xff0c;例如s…

做亞馬遜廣告,有哪些提高效率的工具

"為什么每天花3小時調整廣告卻看不到效果&#xff1f;""如何避免高轉化關鍵詞被競爭對手搶走&#xff1f;""為什么手動調整預算總是慢市場半拍&#xff1f;""ACOS居高不下真的是關鍵詞選錯了嗎&#xff1f;""有沒有工具能真正實現…

研究學習3DGS的順序

6 個核心基礎模塊 序號模塊說明推薦學習順序1&#x1f4f7; 三維計算機視覺基礎建立對3D場景、點云、體積的空間理解?第一個2&#x1f9ee; CT成像原理與圖像表示理解CT圖像本質、斷層數據、密度單位?并行進行3&#x1f7e1; NeRF與3D Gaussian Splatting原理掌握點云/高斯場…

期刊分類計算機領域會議

該圖片已上傳圖床&#xff0c;需要可自行下載&#xff1a; https://youke1.picui.cn/s1/2025/08/15/689f1e3553930.png 參考鏈接&#xff1a; 【干貨】最全學術期刊級別分類講解_嗶哩嗶哩_bilibili

【計算機視覺與深度學習實戰】01基于直方圖優化的圖像去霧技術

摘要 隨著計算機視覺技術的快速發展,圖像去霧已成為數字圖像處理領域的重要研究方向。霧霾、灰塵、水汽等環境因素會嚴重降低圖像的對比度和可見度,影響圖像的視覺效果和后續的計算機視覺任務。本文深入探討了基于直方圖優化的圖像去霧技術,包括全局直方圖均衡化、對比度限…

Vue3 + Axios 實現一個精美天氣組件(含實時與未來預報)

Vue3 Axios 實現一個精美天氣組件&#xff08;含實時與未來預報&#xff09; 一、前言 在很多管理系統、信息看板、門戶首頁中&#xff0c;天氣模塊是一個常見的小組件。 它不僅能展示當前的氣溫、天氣狀況&#xff0c;還能提供未來幾天的天氣趨勢&#xff0c;讓用戶對環境有…

Unity:GUI筆記(二)——工具欄和選擇網格、滾動列表和分組、窗口、自定義皮膚樣式、自動布局

寫在前面&#xff1a;寫本系列(自用)的目的是回顧已經學過的知識、記錄新學習的知識或是記錄心得理解&#xff0c;方便自己以后快速復習&#xff0c;減少遺忘。五、工具欄和選擇網格1、工具欄使用Unity提供的API&#xff1a;GUI.Toolbar()可以創建一個工具欄。有三個參數是必須…

Streamlit實現Qwen對話機器人

Web界面 一、Streamlit 是一個用于創建數據科學和機器學習應用的開源前端框架&#xff0c;能夠快速將 Python 腳本轉化為交互式 Web 應用。通過簡單的 Python API 就能構建出交互式的數據應用。 1、主要特點 簡單易用&#xff1a;純 Python 編寫代碼&#xff0c;API 簡潔直觀…

Linux-地址空間

目錄 1.介紹 2.理解 3.Linux早期的內核調度隊列 1.介紹 這是32位的程序空間地址圖&#xff1a; 為了更好地理解這段圖&#xff0c;我們來寫一段代碼編譯運行&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <std…

**標題:發散創新之力,探索隱私計算的未來**隱私計算,作為當下數字化時代的熱門話題,正受

標題&#xff1a;發散創新之力&#xff0c;探索隱私計算的未來 隱私計算&#xff0c;作為當下數字化時代的熱門話題&#xff0c;正受到越來越多開發者和從業者的關注。本文將帶您走進隱私計算的奇妙世界&#xff0c;探討其背后的技術原理、應用場景以及發展趨勢。 一、隱私計算…

線程P5 | 單例模式[線程安全版]~懶漢 + 餓漢

什么是單例模式&#xff1f;在我們正式講解單例模式之前&#xff0c;沒有了解過的小伙伴可能會有疑問...到底啥叫單例模式&#xff1f;&#xff1f;其實單例模式呢&#xff0c;是我們設計模式中的一種&#xff0c;所謂的設計模式&#xff0c;你可以把它理解為一個模板&#xff…

kubernetes中數據存儲etcd

etcd 在 Kubernetes 中的角色核心定位&#xff1a;Kubernetes 的 唯一持久化數據存儲&#xff08;一致性數據庫&#xff09;。職責&#xff1a; 保存整個集群的期望狀態&#xff08;desired state&#xff09;&#xff0c;包括節點信息、Pod 清單、Service 定義、ConfigMap、Se…

Linux crontab定時任務

參考資料 【図解】cronの仕組み定時任務 - crontab解決ubuntu下定時任務不執行問題crontab環境變量問題&#x1f4a5;Linux定時任務功能詳解&#xff1a;crontab與at命令應用指南 目錄一. 環境準備1.1 wsl開啟systemd1.2 開啟cron日志二. cron服務管理相關命令2.1 service 的方…

企業頻繁收到軟件律師函?如何徹底解決這一難題

1. 引言&#xff1a;律師函頻發&#xff0c;已成信息化管理的“隱形雷區”在工業制造、芯片、航空航天、船舶制造、醫療器械等高要求行業&#xff0c;軟件不僅是研發與生產的關鍵工具&#xff0c;更是企業數據與知識產權安全的“底座”。然而&#xff0c;不少企業卻在日常運營中…

在 macOS 上順利安裝 lapsolver

一、什么是 lapsolver&#xff1f; lapsolver 是一個用于求解線性分配問題&#xff08;Linear Assignment Problem, LAP&#xff09; 的 Python 庫。線性分配問題是運籌學中的經典問題&#xff0c;核心是在兩個集合&#xff08;如“工人”與“任務”&#xff09;之間找到一組最…