2025-05-28 Python深度學習8——優化器

文章目錄

  • 1 工作原理
  • 2 常見優化器
    • 2.1 SGD
    • 2.2 Adam
  • 3 優化器參數
  • 4 學習率
  • 5 使用最佳實踐

本文環境:

  • Pycharm 2025.1
  • Python 3.12.9
  • Pytorch 2.6.0+cu124

? 優化器 (Optimizer) 是深度學習中的核心組件,負責根據損失函數的梯度來更新模型的參數,使模型能夠逐步逼近最優解。在 PyTorch 中,優化器通過torch.optim模塊提供。

? Pytorch 鏈接:https://docs.pytorch.org/docs/stable/optim.html。

1 工作原理

? 優化器的工作流程如下:

  1. 計算損失函數的梯度 (通過backward()方法)。
  2. 根據梯度更新模型參數 (通過step()方法)。
  3. 清除之前的梯度 (通過zero_grad()方法)。
result_loss.backward()  # 計算梯度
optim.step()           # 更新參數
optim.zero_grad()      # 清除梯度

2 常見優化器

? PyTorch 提供多種優化器,以 SGD 和 Adam 為例。

2.1 SGD

? 基礎優化器,可以添加動量 (momentum) 來加速收斂。

image-20250528111156055
參數類型默認值作用使用建議
paramsiterable-待優化參數必須傳入model.parameters()或參數組字典,支持分層配置
lrfloat1e-3學習率控制參數更新步長,SGD常用0.01-0.1,Adam常用0.001
momentumfloat0動量因子加速梯度下降(Adam內置動量,無需單獨設置)
dampeningfloat0動量阻尼抑制動量震蕩(僅當momentum>0時生效)
weight_decayfloat0L2正則化防止過擬合,AdamW建議0.01-0.1
nesterovboolFalseNesterov動量改進版動量法(需momentum>0)
maximizeboolFalse最大化目標默認最小化損失,True時改為最大化
foreachboolNone向量化實現CUDA下默認開啟,內存不足時禁用
differentiableboolFalse可微優化允許優化器步驟參與自動微分(影響性能)
fusedboolNone融合內核CUDA加速,支持float16/32/64/bfloat16

2.2 Adam

image-20250528111450759
  • 特點:自適應矩估計,結合了動量法和 RMSProp 的優點。
  • 優點:通常收斂速度快,對學習率不太敏感。
參數名稱類型默認值作用使用建議
paramsiterable-需要優化的參數(如model.parameters()必須傳入,支持參數分組配置
lrfloat1e-3學習率(控制參數更新步長)推薦0.001起調,CV任務可嘗試0.0001-0.01
betas(float, float)(0.9, 0.999)梯度一階矩(β?)和二階矩(β?)的衰減系數保持默認,除非有特殊需求
epsfloat1e-8分母穩定項(防止除以零)混合精度訓練時可增大至1e-6
weight_decayfloat0L2正則化系數推薦0.01-0.1(使用AdamW時更有效)
decoupled_weight_decayboolFalse啟用AdamW模式(解耦權重衰減)需要權重衰減時建議設為True
amsgradboolFalse使用AMSGrad變體(解決收斂問題)訓練不穩定時可嘗試啟用
foreachboolNone使用向量化實現加速(內存消耗更大)CUDA環境下默認開啟,內存不足時禁用
maximizeboolFalse最大化目標函數(默認最小化)特殊需求場景使用
capturableboolFalse支持CUDA圖捕獲僅在圖捕獲場景啟用
differentiableboolFalse允許通過優化器步驟進行自動微分高階優化需求啟用(性能下降)
fusedboolNone使用融合內核實現(需CUDA)支持float16/32/64時啟用可加速

3 優化器參數

? 所有優化器都接收兩個主要參數:

  1. params:要優化的參數,通常是model.parameters()
  2. lr:學習率(learning rate),控制參數更新的步長。

? 其他常見參數:

  • weight_decay:L2 正則化系數,防止過擬合。
  • momentum:動量因子,加速 SGD 在相關方向的收斂。
  • betas(Adam 專用):用于計算梯度及其平方的移動平均的系數。

4 學習率

? 學習率是優化器中最重要的超參數之一。

  • 太大:可能導致震蕩或發散。
  • 太小:收斂速度慢。
  • 常見策略:
    • 固定學習率 (如代碼中的 0.01)。
    • 學習率調度器 (Learning Rate Scheduler) 動態調整。

5 使用最佳實踐

  1. 梯度清零:每次迭代前調用optimizer.zero_grad(),避免梯度累積。
  2. 參數更新順序:先backward()step()
  3. 學習率選擇:可以從默認值開始 (如 Adam 的 0.001),然后根據效果調整。
import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10(root='./dataset',  # 保存路徑train=False,  # 是否為訓練集transform=torchvision.transforms.ToTensor(),  # 轉換為張量download=True  # 是否下載
)dataloader = DataLoader(dataset, batch_size=1)class MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.model = nn.Sequential(nn.Conv2d(3, 32, 5, 1, 2),nn.MaxPool2d(2),nn.Conv2d(32, 32, 5, 1, 2),nn.MaxPool2d(2),nn.Conv2d(32, 64, 5, 1, 2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(64 * 4 * 4, 64),nn.Linear(64, 10))def forward(self, x):return self.model(x)loss = nn.CrossEntropyLoss()
model = MyModel()
torch.optim.Adam(model.parameters(), lr=0.01)
optim = torch.optim.SGD(model.parameters(), lr=0.01)for epoch in range(20):running_loss = 0.0# 遍歷dataloader中的數據for data in dataloader:# 獲取數據和標簽imgs, targets = data# 使用模型對數據進行預測output = model(imgs)# 計算預測結果和真實標簽之間的損失result_loss = loss(output, targets)# 將梯度置零optim.zero_grad()# 反向傳播計算梯度result_loss.backward()# 更新模型參數optim.step()running_loss += result_lossprint(f'第 {epoch + 1} 輪的損失為 {running_loss}')

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

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

相關文章

Web攻防-SQL注入增刪改查HTTP頭UAXFFRefererCookie無回顯報錯

知識點: 1、Web攻防-SQL注入-操作方法&增刪改查 2、Web攻防-SQL注入-HTTP頭&UA&Cookie 3、Web攻防-SQL注入-HTTP頭&XFF&Referer 案例說明: 在應用中,存在增刪改查數據的操作,其中SQL語句結構不一導致注入語句…

Windows MongoDB C++驅動安裝

MongoDB驅動下載 MongoDB 官網MongoDB C驅動程序入門MongoDB C驅動程序入門 安裝環境 安裝CMAKE安裝Visual Studio 編譯MongoDB C驅動 C驅動依賴C驅動,需要先編譯C驅動 下載MongoDB C驅動源碼 打開CMAKE(cmake-gui) 選擇源碼及輸出路徑,然后點擊configure …

使用 C/C++ 和 OpenCV 調用攝像頭

使用 C/C 和 OpenCV 調用攝像頭 📸 OpenCV 是一個強大的計算機視覺庫,它使得從攝像頭捕獲和處理視頻流變得非常簡單。本文將指導你如何使用 C/C 和 OpenCV 來調用攝像頭、讀取視頻幀并進行顯示。 準備工作 在開始之前,請確保你已經正確安裝…

使用微軟最近開源的WSL在Windows上優雅的運行Linux

install wsl https://github.com/microsoft/WSL/releases/download/2.4.13/wsl.2.4.13.0.x64.msi install any distribution from microsoft store, such as kali-linux from Kali office website list of distribution PS C:\Users\50240> wsl -l -o 以下是可安裝的有…

Win11安裝Dify

1、打開Virtual Machine Platform功能 電腦系統為:Windows 11 家庭中文版24H2版本。 打開控制面板,點擊“程序”,點擊“啟用或關閉Windows功能”。 下圖標記的“Virtual Machine Platform”、“適用于 Linux 的 Windows 子系統”、“Windows…

C++模板類深度解析與氣象領域應用指南

支持開源,為了更好的后來者 ————————————————————————————————————————————————————By 我說的 C模板類深度解析與氣象領域應用指南 一、模板類核心概念 1.1 模板類定義 模板類是C泛型編程的核心機制&#x…

MongoDB(七) - MongoDB副本集安裝與配置

文章目錄 前言一、下載MongoDB1. 下載MongoDB2. 上傳安裝包3. 創建相關目錄 二、安裝配置MongoDB1. 解壓MongoDB安裝包2. 重命名MongoDB文件夾名稱3. 修改配置文件4. 分發MongoDB文件夾5. 配置環境變量6. 啟動副本集7. 進入MongoDB客戶端8. 初始化副本集8.1 初始化副本集8.2 添…

mac筆記本如何快捷鍵截圖后自動復制到粘貼板

前提:之前只會進行部分區域截圖操作(commandshift4)操作,截圖后發現未自動保存在剪貼板,還要進行一步手動復制到剪貼板的操作。 mac筆記本如何快捷鍵截圖后自動復制到粘貼板 截取 Mac 屏幕的一部分并將其自動復制到剪…

WPF 按鈕點擊音效實現

WPF 按鈕點擊音效實現 下面我將為您提供一個完整的 WPF 按鈕點擊音效實現方案&#xff0c;包含多種實現方式和高級功能&#xff1a; 完整實現方案 MainWindow.xaml <Window x:Class"ButtonClickSound.MainWindow"xmlns"http://schemas.microsoft.com/win…

C++ list基礎概念、list初始化、list賦值操作、list大小操作、list數據插入

list基礎概念&#xff1a;list中的每一部分是一個Node&#xff0c;由三部分組成&#xff1a;val、next、prev&#xff08;指向上一個節點的指針&#xff09; list初始化的代碼&#xff0c;見下 #include<iostream> #include<list>using namespace std;void printL…

【Pandas】pandas DataFrame equals

Pandas2.2 DataFrame Reindexing selection label manipulation 方法描述DataFrame.add_prefix(prefix[, axis])用于在 DataFrame 的行標簽或列標簽前添加指定前綴的方法DataFrame.add_suffix(suffix[, axis])用于在 DataFrame 的行標簽或列標簽后添加指定后綴的方法DataFram…

【ROS2】創建單獨的launch包

【ROS】郭老二博文之:ROS目錄 1、簡述 項目中,可以創建單獨的launch包來管理所有的節點啟動 2、示例 1)創建launch包(python) ros2 pkg create --build-type ament_python laoer_launch --license Apache-2.02)創建啟動文件 先創建目錄:launch 在目錄中創建文件:r…

GitHub 趨勢日報 (2025年05月23日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1All-Hands-AI/OpenHands&#x1f64c;開放式&#xff1a;少代碼&#xff0c;做…

鴻蒙OSUniApp 實現的數據可視化圖表組件#三方框架 #Uniapp

UniApp 實現的數據可視化圖表組件 前言 在移動互聯網時代&#xff0c;數據可視化已成為產品展示和決策分析的重要手段。無論是運營后臺、健康監測、還是電商分析&#xff0c;圖表組件都能讓數據一目了然。UniApp 作為一款優秀的跨平臺開發框架&#xff0c;支持在鴻蒙&#xf…

[ctfshow web入門] web124

信息收集 error_reporting(0); //聽說你很喜歡數學&#xff0c;不知道你是否愛它勝過愛flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];// 長度不允許超過80個字符if (strlen($content) > 80) {die("太長了不會算");}/…

Vue 技術文檔

一、引言 Vue 是一款用于構建用戶界面的漸進式 JavaScript 框架&#xff0c;具有易上手、高性能、靈活等特點&#xff0c;能夠幫助開發者快速開發出響應式的單頁面應用。本技術文檔旨在全面介紹 Vue 的相關技術知識&#xff0c;為開發人員提供參考和指導。 二、環境搭建 2.1…

Nodejs+http-server 使用 http-server 快速搭建本地圖片訪問服務

在開發過程中&#xff0c;我們經常需要臨時查看或分享本地的圖片資源&#xff0c;比如設計稿、截圖、素材等。雖然可以通過壓縮發送&#xff0c;但效率不高。本文將教你使用 Node.js 的一個輕量級工具 —— http-server&#xff0c;快速搭建一個本地 HTTP 圖片預覽服務&#xf…

通義智文開源QwenLong-L1: 邁向長上下文大推理模型的強化學習

&#x1f389; 動態 2025年5月26日: &#x1f525; 我們正式發布&#x1f917;QwenLong-L1-32B——首個采用強化學習訓練、專攻長文本推理的LRM模型。在七項長文本文檔問答基準測試中&#xff0c;QwenLong-L1-32B性能超越OpenAI-o3-mini和Qwen3-235B-A22B等旗艦LRM&#xff0c…

學習如何設計大規模系統,為系統設計面試做準備!

前言 在當今快速發展的技術時代&#xff0c;系統設計能力已成為衡量一名軟件工程師專業素養的重要標尺。隨著云計算、大數據、人工智能等領域的興起&#xff0c;構建高性能、可擴展且穩定的系統已成為企業成功的關鍵。然而&#xff0c;對于許多工程師而言&#xff0c;如何有效…

Python生成ppt(python-pptx)N問N答(如何繪制一個沒有背景的矩形框;如何繪制一個沒有背景的矩形框)

文章目錄 [toc]1. **如何安裝python-pptx庫&#xff1f;**2. **如何創建一個空白PPT文件&#xff1f;**3. **如何添加幻燈片并設置布局&#xff1f;**4. **如何添加文本內容&#xff1f;**5. **如何插入圖片&#xff1f;**6. **如何設置動畫和轉場效果&#xff1f;**9. **如何繪…