day37 早停策略和模型權重的保存

DAY 37

我今天的筆記是用cpu訓練的,請自行修改為gpu訓練

仍然是循序漸進,先復習之前的代碼

import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import time
import matplotlib.pyplot as plt
from tqdm import tqdm  # 導入tqdm庫用于進度條顯示
import warnings
warnings.filterwarnings("ignore")  # 忽略警告信息# 設置GPU設備
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(f"使用設備: {device}")# 加載鳶尾花數據集
iris = load_iris()
X = iris.data  # 特征數據
y = iris.target  # 標簽數據# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 歸一化數據
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 將數據轉換為PyTorch張量并移至GPU
X_train = torch.FloatTensor(X_train).to(device)
y_train = torch.LongTensor(y_train).to(device)
X_test = torch.FloatTensor(X_test).to(device)
y_test = torch.LongTensor(y_test).to(device)class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.fc1 = nn.Linear(4, 10)  # 輸入層到隱藏層self.relu = nn.ReLU()self.fc2 = nn.Linear(10, 3)  # 隱藏層到輸出層def forward(self, x):out = self.fc1(x)out = self.relu(out)out = self.fc2(out)return out# 實例化模型并移至GPU
model = MLP().to(device)# 分類問題使用交叉熵損失函數
criterion = nn.CrossEntropyLoss()# 使用隨機梯度下降優化器
optimizer = optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 20000  # 訓練的輪數# 用于存儲每100個epoch的損失值和對應的epoch數
losses = []
epochs = []start_time = time.time()  # 記錄開始時間# 創建tqdm進度條
with tqdm(total=num_epochs, desc="訓練進度", unit="epoch") as pbar:# 訓練模型for epoch in range(num_epochs):# 前向傳播outputs = model(X_train)  # 隱式調用forward函數loss = criterion(outputs, y_train)# 反向傳播和優化optimizer.zero_grad()loss.backward()optimizer.step()# 記錄損失值并更新進度條if (epoch + 1) % 200 == 0:losses.append(loss.item())epochs.append(epoch + 1)# 更新進度條的描述信息pbar.set_postfix({'Loss': f'{loss.item():.4f}'})# 每1000個epoch更新一次進度條if (epoch + 1) % 1000 == 0:pbar.update(1000)  # 更新進度條# 確保進度條達到100%if pbar.n < num_epochs:pbar.update(num_epochs - pbar.n)  # 計算剩余的進度并更新time_all = time.time() - start_time  # 計算訓練時間
print(f'Training time: {time_all:.2f} seconds')# 可視化損失曲線
plt.figure(figsize=(10, 6))
plt.plot(epochs, losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training Loss over Epochs')
plt.grid(True)
plt.show()# 在測試集上評估模型,此時model內部已經是訓練好的參數了
# 評估模型
model.eval() # 設置模型為評估模式
with torch.no_grad(): # torch.no_grad()的作用是禁用梯度計算,可以提高模型推理速度outputs = model(X_test)  # 對測試數據進行前向傳播,獲得預測結果_, predicted = torch.max(outputs, 1) # torch.max(outputs, 1)返回每行的最大值和對應的索引#這個函數返回2個值,分別是最大值和對應索引,參數1是在第1維度(行)上找最大值,_ 是Python的約定,表示忽略這個返回值,所以這個寫法是找到每一行最大值的下標# 此時outputs是一個tensor,p每一行是一個樣本,每一行有3個值,分別是屬于3個類別的概率,取最大值的下標就是預測的類別# predicted == y_test判斷預測值和真實值是否相等,返回一個tensor,1表示相等,0表示不等,然后求和,再除以y_test.size(0)得到準確率# 因為這個時候數據是tensor,所以需要用item()方法將tensor轉化為Python的標量# 之所以不用sklearn的accuracy_score函數,是因為這個函數是在CPU上運行的,需要將數據轉移到CPU上,這樣會慢一些# size(0)獲取第0維的長度,即樣本數量correct = (predicted == y_test).sum().item() # 計算預測正確的樣本數accuracy = correct / y_test.size(0)print(f'測試集準確率: {accuracy * 100:.2f}%')
使用設備: cuda:0訓練進度: 100%|██████████| 20000/20000 [00:08<00:00, 2250.01epoch/s, Loss=0.0637]Training time: 8.89 seconds

在這里插入圖片描述

測試集準確率: 96.67%

訓練集的loss在下降,但是有可能出現過擬合現象:模型過度學習了訓練集的信息,導致在測試集上表現不理想。

所以很自然的,我們想同步打印測試集的loss,以判斷是否出現過擬合現象。

過擬合的判斷

import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import time
import matplotlib.pyplot as plt
from tqdm import tqdm  # 導入tqdm庫用于進度條顯示
import warnings
warnings.filterwarnings("ignore")  # 忽略警告信息# 設置GPU設備
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(f"使用設備: {device}")# 加載鳶尾花數據集
iris = load_iris()
X = iris.data  # 特征數據
y = iris.target  # 標簽數據# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 歸一化數據
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 將數據轉換為PyTorch張量并移至GPU
X_train = torch.FloatTensor(X_train).to(device)
y_train = torch.LongTensor(y_train).to(device)
X_test = torch.FloatTensor(X_test).to(device)
y_test = torch.LongTensor(y_test).to(device)class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.fc1 = nn.Linear(4, 10)  # 輸入層到隱藏層self.relu = nn.ReLU()self.fc2 = nn.Linear(10, 3)  # 隱藏層到輸出層def forward(self, x):out = self.fc1(x)out = self.relu(out)out = self.fc2(out)return out# 實例化模型并移至GPU
model = MLP().to(device)# 分類問題使用交叉熵損失函數
criterion = nn.CrossEntropyLoss()# 使用隨機梯度下降優化器
optimizer = optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 20000  # 訓練的輪數# 用于存儲每200個epoch的損失值和對應的epoch數
train_losses = [] # 存儲訓練集損失
test_losses = [] # 新增:存儲測試集損失
epochs = []start_time = time.time()  # 記錄開始時間# 創建tqdm進度條
with tqdm(total=num_epochs, desc="訓練進度", unit="epoch") as pbar:# 訓練模型for epoch in range(num_epochs):# 前向傳播outputs = model(X_train)  # 隱式調用forward函數train_loss = criterion(outputs, y_train)# 反向傳播和優化optimizer.zero_grad()train_loss.backward()optimizer.step()# 記錄損失值并更新進度條if (epoch + 1) % 200 == 0:# 計算測試集損失,新增代碼model.eval()with torch.no_grad():test_outputs = model(X_test)test_loss = criterion(test_outputs, y_test)model.train()train_losses.append(train_loss.item())test_losses.append(test_loss.item())epochs.append(epoch + 1)# 更新進度條的描述信息pbar.set_postfix({'Train Loss': f'{train_loss.item():.4f}', 'Test Loss': f'{test_loss.item():.4f}'})# 每1000個epoch更新一次進度條if (epoch + 1) % 1000 == 0:pbar.update(1000)  # 更新進度條# 確保進度條達到100%if pbar.n < num_epochs:pbar.update(num_epochs - pbar.n)  # 計算剩余的進度并更新time_all = time.time() - start_time  # 計算訓練時間
print(f'Training time: {time_all:.2f} seconds')# 可視化損失曲線
plt.figure(figsize=(10, 6))
plt.plot(epochs, train_losses, label='Train Loss') # 原始代碼已有
plt.plot(epochs, test_losses, label='Test Loss')  # 新增:測試集損失曲線
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training and Test Loss over Epochs')
plt.legend() # 新增:顯示圖例
plt.grid(True)
plt.show()# 在測試集上評估模型,此時model內部已經是訓練好的參數了
# 評估模型
model.eval() # 設置模型為評估模式
with torch.no_grad(): # torch.no_grad()的作用是禁用梯度計算,可以提高模型推理速度outputs = model(X_test)  # 對測試數據進行前向傳播,獲得預測結果_, predicted = torch.max(outputs, 1) # torch.max(outputs, 1)返回每行的最大值和對應的索引correct = (predicted == y_test).sum().item() # 計算預測正確的樣本數accuracy = correct / y_test.size(0)print(f'測試集準確率: {accuracy * 100:.2f}%')    
使用設備: cuda:0訓練進度: 100%|██████████| 20000/20000 [00:08<00:00, 2268.15epoch/s, Train Loss=0.0609, Test Loss=0.0557]Training time: 8.82 seconds

在這里插入圖片描述

測試集準確率: 96.67%

實際上,打印測試集的loss和同步打印測試集的評估指標,是一個邏輯,但是打印loss可以體現在一個圖中。

模型的保存和加載

深度學習中模型的保存與加載主要涉及參數(權重)和整個模型結構的存儲,同時需兼顧訓練狀態(如優化器參數、輪次等)以支持斷點續訓。

僅保存模型參數(推薦)
  • 原理:保存模型的權重參數,不保存模型結構代碼。加載時需提前定義與訓練時一致的模型類。
  • 優點:文件體積小(僅含參數),跨框架兼容性強(需自行定義模型結構)。
# 保存模型參數
torch.save(model.state_dict(), "model_weights.pth")
# 加載參數(需先定義模型結構)
model = MLP()  # 初始化與訓練時相同的模型結構
model.load_state_dict(torch.load("model_weights.pth"))
# model.eval()  # 切換至推理模式(可選)
<All keys matched successfully>
保存模型+權重
  • 原理:保存模型結構及參數
  • 優點:加載時無需提前定義模型類
  • 缺點:文件體積大,依賴訓練時的代碼環境(如自定義層可能報錯)。
# 保存整個模型
torch.save(model, "full_model.pth")# 加載模型(無需提前定義類,但需確保環境一致)
model = torch.load("full_model.pth")
model.eval()  # 切換至推理模式(可選)
MLP((fc1): Linear(in_features=4, out_features=10, bias=True)(relu): ReLU()(fc2): Linear(in_features=10, out_features=3, bias=True)
)
保存訓練狀態(斷點續訓)
  • 原理:保存模型參數、優化器狀態(學習率、動量)、訓練輪次、損失值等完整訓練狀態,用于中斷后繼續訓練。
  • 適用場景:長時間訓練任務(如分布式訓練、算力中斷)。
# # 保存訓練狀態
# checkpoint = {
#     "model_state_dict": model.state_dict(),
#     "optimizer_state_dict": optimizer.state_dict(),
#     "epoch": epoch,
#     "loss": best_loss,
# }
# torch.save(checkpoint, "checkpoint.pth")# # 加載并續訓
# model = MLP()
# optimizer = torch.optim.Adam(model.parameters())
# checkpoint = torch.load("checkpoint.pth")# model.load_state_dict(checkpoint["model_state_dict"])
# optimizer.load_state_dict(checkpoint["optimizer_state_dict"])
# start_epoch = checkpoint["epoch"] + 1  # 從下一輪開始訓練
# best_loss = checkpoint["loss"]# # 繼續訓練循環
# for epoch in range(start_epoch, num_epochs):
#     train(model, optimizer, ...)

在這里插入圖片描述

早停法(early stop)

我們梳理下過擬合的情況

  • 正常情況:訓練集和測試集損失同步下降,最終趨于穩定。

  • 過擬合:訓練集損失持續下降,但測試集損失在某一時刻開始上升(或不再下降)。

如果可以監控驗證集的指標不再變好,此時提前終止訓練,避免模型對訓練集過度擬合。----監控的對象是驗證集的指標。這種策略叫早停法。

import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import time
import matplotlib.pyplot as plt
from tqdm import tqdm  # 導入tqdm庫用于進度條顯示
import warnings
warnings.filterwarnings("ignore")  # 忽略警告信息# 設置GPU設備
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(f"使用設備: {device}")# 加載鳶尾花數據集
iris = load_iris()
X = iris.data  # 特征數據
y = iris.target  # 標簽數據# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 歸一化數據
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 將數據轉換為PyTorch張量并移至GPU
X_train = torch.FloatTensor(X_train).to(device)
y_train = torch.LongTensor(y_train).to(device)
X_test = torch.FloatTensor(X_test).to(device)
y_test = torch.LongTensor(y_test).to(device)class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.fc1 = nn.Linear(4, 10)  # 輸入層到隱藏層self.relu = nn.ReLU()self.fc2 = nn.Linear(10, 3)  # 隱藏層到輸出層def forward(self, x):out = self.fc1(x)out = self.relu(out)out = self.fc2(out)return out# 實例化模型并移至GPU
model = MLP().to(device)# 分類問題使用交叉熵損失函數
criterion = nn.CrossEntropyLoss()# 使用隨機梯度下降優化器
optimizer = optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 20000  # 訓練的輪數# 用于存儲每200個epoch的損失值和對應的epoch數
train_losses = []  # 存儲訓練集損失
test_losses = []   # 存儲測試集損失
epochs = []# ===== 新增早停相關參數 =====
best_test_loss = float('inf')  # 記錄最佳測試集損失
best_epoch = 0                 # 記錄最佳epoch
patience = 50                # 早停耐心值(連續多少輪測試集損失未改善時停止訓練)
counter = 0                    # 早停計數器
early_stopped = False          # 是否早停標志
# ==========================start_time = time.time()  # 記錄開始時間# 創建tqdm進度條
with tqdm(total=num_epochs, desc="訓練進度", unit="epoch") as pbar:# 訓練模型for epoch in range(num_epochs):# 前向傳播outputs = model(X_train)  # 隱式調用forward函數train_loss = criterion(outputs, y_train)# 反向傳播和優化optimizer.zero_grad()train_loss.backward()optimizer.step()# 記錄損失值并更新進度條if (epoch + 1) % 200 == 0:# 計算測試集損失model.eval()with torch.no_grad():test_outputs = model(X_test)test_loss = criterion(test_outputs, y_test)model.train()train_losses.append(train_loss.item())test_losses.append(test_loss.item())epochs.append(epoch + 1)# 更新進度條的描述信息pbar.set_postfix({'Train Loss': f'{train_loss.item():.4f}', 'Test Loss': f'{test_loss.item():.4f}'})# ===== 新增早停邏輯 =====if test_loss.item() < best_test_loss: # 如果當前測試集損失小于最佳損失best_test_loss = test_loss.item() # 更新最佳損失best_epoch = epoch + 1 # 更新最佳epochcounter = 0 # 重置計數器# 保存最佳模型torch.save(model.state_dict(), 'best_model.pth')else:counter += 1if counter >= patience:print(f"早停觸發!在第{epoch+1}輪,測試集損失已有{patience}輪未改善。")print(f"最佳測試集損失出現在第{best_epoch}輪,損失值為{best_test_loss:.4f}")early_stopped = Truebreak  # 終止訓練循環# ======================# 每1000個epoch更新一次進度條if (epoch + 1) % 1000 == 0:pbar.update(1000)  # 更新進度條# 確保進度條達到100%if pbar.n < num_epochs:pbar.update(num_epochs - pbar.n)  # 計算剩余的進度并更新time_all = time.time() - start_time  # 計算訓練時間
print(f'Training time: {time_all:.2f} seconds')# ===== 新增:加載最佳模型用于最終評估 =====
if early_stopped:print(f"加載第{best_epoch}輪的最佳模型進行最終評估...")model.load_state_dict(torch.load('best_model.pth'))
# ================================# 可視化損失曲線
plt.figure(figsize=(10, 6))
plt.plot(epochs, train_losses, label='Train Loss')
plt.plot(epochs, test_losses, label='Test Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training and Test Loss over Epochs')
plt.legend()
plt.grid(True)
plt.show()# 在測試集上評估模型
model.eval()
with torch.no_grad():outputs = model(X_test)_, predicted = torch.max(outputs, 1)correct = (predicted == y_test).sum().item()accuracy = correct / y_test.size(0)print(f'測試集準確率: {accuracy * 100:.2f}%')    
使用設備: cpu訓練進度: 100%|██████████| 20000/20000 [00:05<00:00, 3387.31epoch/s, Train Loss=0.0607, Test Loss=0.0529]Training time: 5.91 seconds

在這里插入圖片描述

測試集準確率: 96.67%

上述早停策略的具體邏輯如下

  • 首先初始一個計數器counter。
  • 每 200 輪訓練執行一次判斷:比較當前損失與歷史最佳損失。
    • 若當前損失更低,保存模型參數。
    • 若當前損失更高或相等,計數器加 1。
      • 若計數器達到最大容許的閾值patience,則停止訓練。

在這里插入圖片描述

之所以設置閾值patience,是因為訓練過程中存在波動,不能完全停止訓練。同時每隔固定的訓練輪次都會保存模型參數,下次可以接著這里訓練,縮小訓練的范圍。

我這里之所以沒有觸發早停策略,有以下幾個原因:

  1. 測試集損失在訓練中持續下降或震蕩,但未出現連續 patience 輪不改善
  2. patience值過大,需要調小

實際上,在早停策略中,保存 checkpoint(檢查點) 是更優選擇,因為它不僅保存了模型參數,還記錄了訓練狀態(如優化器參數、輪次、損失值等),一但出現了過擬合,方便后續繼續訓練。

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

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

相關文章

網絡爬蟲分類全解析

網絡爬蟲作為數據獲取的重要工具,其分類方式多樣,不同類型的爬蟲在技術實現、應用場景和功能特性上存在顯著差異。深入理解這些分類,有助于開發者根據實際需求選擇合適的爬蟲方案。本文將從技術特性、應用場景和架構設計三個維度,系統介紹網絡爬蟲的主要分類。 一、按技術…

ECR倉庫CloudFormation模板完整指南

概述 本文檔詳細介紹了一個通用的Amazon ECR(Elastic Container Registry)倉庫CloudFormation模板,該模板支持多業務組、參數化配置,并包含完整的安全策略、生命周期管理和監控功能。 模板特性 核心功能 ? 支持4個業務組:app、ai、mall、frontend? 靈活的服務名手動輸…

C++(STL源碼刨析/List)

一 List 核心字段和接口1. 節點字段template<class T> struct __list_node {typedef void* void_pointer;void_pointer prev;void_pointer next;T data; }由于 鏈表 不是連續的內存塊&#xff0c;所以對每一個申請到的內存塊要進行統一組織&#xff0c;也就是封裝成一個類…

蘋果App上架流程:不用Mac也可以上架的方法

iOS App 的上架流程一直被認為是門檻最高、流程最繁瑣的移動端工作之一。對很多使用 Windows 或 Linux 進行開發的跨平臺團隊來說&#xff0c;Mac 的缺位更放大了每一步的難度。 在我們近期為一款本地生活類 App 進行 iOS 上架時&#xff0c;團隊成員幾乎沒有配備本地 Mac&…

【爬蟲】- 爬蟲原理及其入門

爬蟲01 - 爬蟲原理及其入門 文章目錄爬蟲01 - 爬蟲原理及其入門一&#xff1a;爬蟲原理1&#xff1a;爬蟲的優勢?2&#xff1a;爬蟲的核心庫3&#xff1a;經典舉例4&#xff1a;合規問題一&#xff1a;爬蟲原理 學習爬蟲之前前置知識需要了解這些&#xff1a; 我的HTTP介紹, 了…

G5打卡——Pix2Pix算法

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 Pix2Pix 是一種基于條件生成對抗網絡&#xff08;cGANs&#xff09;的圖像到圖像翻譯算法&#xff0c;由 Phillip Isola 等人在 2016 年提出。該算法的核心思想…

動力系統模擬與推導-AI云計算數值分析和代碼驗證

當系統是連續的&#xff0c;并且其狀態變量不僅隨時間變化&#xff0c;而且隨空間維度變化時&#xff0c;需要使用偏微分方程&#xff08;PDEs&#xff09;來推導運動方程。偏微分方程提供了描述這些空間分布屬性如何相互作用和演化的數學框架。 選擇使用常微分方程&#xff08…

P4597 序列 sequence題解

P4597 序列 sequence 給定一個數列&#xff0c;每次操作可以使任意一個數1或-1&#xff0c;求小的操作次數&#xff0c;使得數列變成不降數列. 1.對于前面比當前位的數字大的數&#xff0c;設最大數為 xxx &#xff0c;當前的數為 yyy ,則對于 xxx 到 yyy 中間的任意數&#xf…

雨污管網智慧監測系統網絡建設方案:基于SD-WAN混合架構的最佳實踐

隨著城市化的快速推進&#xff0c;雨污管網的管理與運行面臨著日益復雜的挑戰&#xff0c;例如內澇、污水溢流、非法排污等問題頻發。為了更高效地管理分布廣泛的監測點&#xff0c;保障系統運行穩定性&#xff0c;構建一套高效、低成本、易運維的網絡架構至關重要。本文將分享…

世俱杯直播數據源通過反匯編獲取到

在當今的互聯網體育賽事直播中&#xff0c;許多平臺為了保護其直播資源&#xff0c;會采用加密、混淆或動態加載等方式隱藏真實的視頻流地址&#xff08;如 .m3u8 或 .flv&#xff09;。對于普通用戶和開發者來說&#xff0c;直接通過網頁源碼或瀏覽器調試器難以快速定位這些關…

字節豆包又一個新功能,超級實用,4 種玩法,你肯定用得上!(建議收藏)

前段時間&#xff0c;分享了一個非常好用的視頻總結工具——百度網盤和百度文庫聯合推出的「AI 筆記」。它能自動根據視頻內容&#xff0c;生成圖文視頻總結、表格總結、思維導圖等。關鍵是帶時間戳&#xff0c;能直接跳轉到視頻的位置。但這個功能隱藏在百度網盤里&#xff0c…

AI進化論08:機器學習的崛起——數據和算法的“二人轉”,AI“悶聲發大財”

上回咱們聊了第二次AI寒冬&#xff0c;AI為了“活下去”&#xff0c;不得不“改頭換面”&#xff0c;從“AI”變成了“機器學習”。結果你猜怎么著&#xff1f;這“機器學習”啊&#xff0c;還真就“悶聲發大財”了&#xff01;它不再執著于模擬人類的“思維過程”&#xff0c;…

【MySQL】———— 索引

作者主頁&#xff1a; 作者主頁 本篇博客專欄&#xff1a;Linux 創作時間 &#xff1a;2025年7月11日 Mysql索引 索引介紹 索引是什么 根據官方對索引的介紹&#xff0c;索引是幫助MySQL高效的獲取數據的數據結構&#xff0c;在我看來&#xff0c;索引就相當于一本書的目…

頁面html,當鼠標點擊圖標,移開圖標,顏色方塊消失

html頁面代碼&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>顏色選擇器</title><style>body {font-family: "Microsoft YaHei", sans-serif;padding: 20px;}.c…

netdxf—— CAD c#二次開發之(netDxf 處理 DXF 文件)

1.創建新項目打開 VS2022&#xff0c;選擇 "創建新項目"搜索 "控制臺應用"&#xff0c;選擇 ".NET 6.0 (C#)" 模板&#xff0c;點擊 "下一步"項目名稱&#xff1a;"DxfProcessor"&#xff0c;位置&#xff1a;自選&#xff…

如何將一個本地的jar包安裝到 Maven 倉庫中

我們需要執行以下步驟&#xff1a; 首先&#xff0c;打開命令提示符&#xff08;CMD&#xff09;或 PowerShell&#xff0c;執行以下命令&#xff1a; mvn install:install-file ^ -Dfile"你的jar包路徑" ^ -DgroupId"組織ID" ^ -DartifactId"項目ID&…

AI賦能的企業音頻智能中樞:重構會議價值提升決策效率的數字化轉型實踐

在當今快節奏的商業環境中&#xff0c;企業管理者每天都要處理海量信息&#xff0c;其中音頻內容占據了重要位置。你是否經常遇到這樣的困擾&#xff1a;重要會議結束后&#xff0c;錄音文件靜靜躺在設備里&#xff0c;遲遲無法變成可用的會議紀要跨部門協作時&#xff0c;收到…

醫學+AI!湖北中醫藥大學信息工程學院與和鯨科技簽約101數智領航計劃

為積極推動人工智能與中醫藥信息化深度融合&#xff0c;著力培育既精通中醫藥理論又掌握人工智能技術的復合型人才&#xff0c;6 月 27 日&#xff0c;湖北中醫藥大學信息工程學院與上海和今信息科技有限公司&#xff08;以下簡稱 “和鯨科技”&#xff09;召開校企合作座談會&…

全面掌控 Claude Code:命令 + 參數 + 快捷鍵一文全整理(建議收藏)

近日&#xff0c;隨著Cursor套餐定價的風波&#xff0c;Claude Code 無疑成為了最近頗受歡迎的代碼助手&#xff0c;不僅支持多種編程語言&#xff0c;還比Cursor更能理解復雜的上下文邏輯&#xff0c;極受廣大開發者的青睞。 不過&#xff0c;與其他AI編程助手不同的是&#x…

深度學習-正則化

摘要 本文系統闡述了深度學習中的正則化技術體系&#xff0c;圍繞防止過擬合這一核心目標展開。首先通過偏差-方差框架解析過擬合/欠擬合本質&#xff0c;并使用對比表明確區分特征&#xff1b;其次深入分析了L1/L2正則化的數學原理&#xff08;2mλ?∥w∥2與mλ?∥w∥1?&a…