深度學習-----《PyTorch神經網絡高效訓練與測試:優化器對比、激活函數優化及實戰技巧》

一、訓練過程

  1. 并行批量訓練機制

    • 一次性輸入64個批次數據,創建64個獨立神經網絡并行訓練。
    • 所有網絡共享參數(Ω),更新時計算64個批次的平均損失,統一更新全局參數。
  2. 梯度更新策略

    • 使用torch.no_grad()上下文管理器清理反向傳播產生的臨時數據,優化內存利用。
  3. 多輪訓練重要性

    • 單輪訓練(6萬張圖片)僅能獲得19.22%正確率,需通過循環訓練集(如10輪)提升模型收斂性。
    • model.train()模式確保參數持續更新,避免重復初始化。

二、測試過程

  1. 測試集評估邏輯

    • 輸入測試數據后,前向傳播得到預測結果,通過argmax提取最大概率對應的類別。
    • 統計預測正確的數量,計算正確率(Correct / Total Test Samples)。
  2. 損失值與正確率的關系

    • 測試階段仍會計算損失值,但非核心指標;正確率(如70.04%)為模型性能的關鍵衡量標準。
  3. 資源管理優化

    • 使用with torch.no_grad()減少冗余計算,提升測試效率。

三、關鍵實現細節

  1. 數據預處理

    • 測試數據需明確設備(GPU/CPU),通過to(device)確保設備一致性。
  2. 預測結果處理

    • 將預測概率轉換為類別標簽,對比真實標簽統計正確率。
  3. 訓練效率優化

    • 設置打印間隔(如每100批次輸出一次損失值),平衡調試需求與訓練速度。

四、實踐要點

  • 超參數調整:通過增加訓練輪數(如從10輪擴展至50輪)可顯著提升模型性能。
  • 驗證集作用:測試集主要用于評估最終模型效果,而非實時調參。
  • 競賽策略:合理分配訓練時間,確保比賽前完成高效模型迭代。

五、關鍵代碼片段

1. 批量梯度下降訓練核心代碼

# 初始化模型參數 Ω
model = MyNeuralNetwork().to(device)  # device為'cuda'或'cpu'
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
criterion = torch.nn.CrossEntropyLoss()  # 分類任務損失函數# 訓練循環
for epoch in range(num_epochs):for batch_idx, (inputs, labels) in enumerate(train_loader):# 前向傳播outputs = model(inputs)loss = criterion(outputs, labels)# 反向傳播 + 參數更新optimizer.zero_grad()  # 清空梯度緩存loss.backward()        # 反向傳播計算梯度optimizer.step()       # 更新參數 Ω# 每100批次打印一次損失值if batch_idx % 100 == 0:print(f"Epoch {epoch}, Batch {batch_idx}: Loss = {loss.item()}")

2. 多輪訓練擴展

# 外層循環控制訓練輪數
for epoch in range(num_epochs):# 內層循環執行單輪訓練(6萬張圖片)for inputs, labels in train_loader:# ...(同上訓練邏輯)...# 每輪結束后測試模型test_accuracy = evaluate_model(model, test_loader)print(f"Epoch {epoch+1} Test Accuracy: {test_accuracy}")

3. 測試集評估代碼

def evaluate_model(model, test_loader):correct = 0total = 0with torch.no_grad():  # 禁用梯度計算以節省內存for inputs, labels in test_loader:inputs = inputs.to(device)  # 確保數據在正確設備上labels = labels.to(device)outputs = model(inputs)     # 前向傳播_, predicted = torch.max(outputs.data, 1)  # argmax獲取預測類別total += labels.size(0)      # 統計總樣本數correct += (predicted == labels).sum().item()  # 統計正確數return correct / total  # 返回準確率

4. 關鍵優化點說明

  • 設備兼容性:通過inputs.to(device)統一數據與模型的設備(CPU/GPU)
  • 資源管理with torch.no_grad()減少測試階段的內存占用
  • 批量處理:64個批次并行訓練加速收斂(需調整DataLoaderbatch_size

六、核心問題

  • 訓練效率低:原模型使用隨機梯度下降(SGD)優化器,需100輪訓練才能達到98%正確率,耗時約10分鐘;改用Adam優化器后,僅需10輪訓練即可達到96.81%正確率。
  • 梯度消失問題:Sigmoid激活函數的導數范圍(0~0.25)導致多層網絡參數更新停滯,損失值在局部震蕩無法收斂45。


七、關鍵知識點

1. 優化器改進:從SGD到Adam

  • 原理
    • SGD每次用全部數據更新參數,易陷入局部最優且收斂慢;
    • Adam通過自適應學習率和動量機制加速收斂,避免SGD的“高方差”問題。

代碼示例

# 原SGD優化器(需修改)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 改為Adam優化器
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

2. 學習率影響

  • 現象:固定學習率(如0.01)導致訓練后期損失值震蕩,無法逼近全局最優;
  • 解決思路:動態調整學習率(如學習率衰減),但需后續章節展開。

3. 激活函數優化:Sigmoid → ReLU

  • 梯度消失原因
    • Sigmoid導數范圍(0~0.25)導致多層網絡參數更新時梯度逐層衰減至0;
    • 數學表達:
  • ReLU優勢
    • 計算簡單,加速訓練

代碼示例

# 原Sigmoid激活函數(需修改)
def sigmoid(x):return 1 / (1 + np.exp(-x))# 改為ReLU激活函數
def relu(x):return np.maximum(0, x)

八、實驗結果對比


九、擴展思考

  • 深層網絡適配性:ReLU在超過3層的網絡中表現優異,是現代深度學習的基礎激活函數
  • 優化器組合:AdamW(帶權重衰減的Adam)可緩解過擬合,適合遷移學習場景

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

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

相關文章

Matplotlib 可視化大師系列(五):plt.pie() - 展示組成部分的餅圖

目錄Matplotlib 可視化大師系列博客總覽Matplotlib 可視化大師系列(五):plt.pie() - 展示組成部分的餅圖一、 餅圖是什么?何時使用(何時避免)?二、 函數原型與核心參數三、 從入門到精通&#x…

C++ Core Guidelines 核心理念

引言 C 是一門功能強大但復雜性極高的編程語言。為了幫助開發者更高效、安全地使用現代 C,C 核心指南(CppCoreGuidelines)應運而生。這份由 C 之父 Bjarne Stroustrup 等人主導的指南,提供了大量關于 C 編碼的規則、最佳實踐和設…

vue3 - 組件間的傳值

組件間傳參 父傳子v-on/props 父組件使用v-on:綁定要傳的參數:parentData"parentData"&#xff1a; <template><div><Child1 :parentData"parentData"></Child1></div> </template> <script setup lang"ts…

Kafka 在 6 大典型用例的落地實踐架構、參數與避坑清單

一、選型速查表場景關鍵目標推薦清單&#xff08;示例&#xff09;消息&#xff08;Messaging&#xff09;解耦、低延遲、可靠投遞acksall、enable.idempotencetrue、retries>0、min.insync.replicas2、合理分區鍵、DLT網站活動追蹤吞吐極高、可回放主題按類型拆分&#xff…

Node.js(1)—— Node.js介紹與入門

前面我們談到一些前端開發的內容&#xff0c;學習了HTML、css和JavaScript&#xff0c;已經掌握了如何編寫一些簡單功能的網頁。但是只屬于前端部分&#xff0c;我們只能在本地打開文件進行瀏覽&#xff0c;不能讓其他人打開我們編寫的網站&#xff1b;這時就需要后端部分上場了…

Python辦公——爬蟲百度翻譯網頁版(自制翻譯小工具——進階更新版)

目錄 專欄導讀 前言 項目概述 功能特點 技術棧 核心架構設計 類結構設計 界面布局設計 核心功能實現 1. 智能語言檢測 2. 異步翻譯處理 3. HTTP請求處理 4. 結果解析與顯示 界面設計亮點 1. 響應式布局 2. 用戶體驗優化 3. 現代化組件 技術難點與解決方案 1. 跨線程UI更新 2. U…

CentOS7 + Docker 部署 Dify 超詳細圖文教程

如今Agent在互聯網上大行其道&#xff0c;網上吵得火熱&#xff0c;各個企業也都想搭建自己的Agent。COZE的開源還有最近新出的JoyAgent也都讓大家躍躍欲試&#xff0c;今天為大家帶來的是Dify的部署方式&#xff0c;相比其他工作流平臺&#xff0c;Dify對于整個Agent制作的流程…

vscode(MSVC)進行c++開發的時,在debug時查看一個eigen數組內部的數值

vscode進行c開發的時&#xff0c;在debug時查看一個eigen數組內部的數值問題描述解決方案拓展其他可視化使用visual studio時的可視化使用別的編譯器的可視化問題描述 使用vscode進行c開發&#xff0c;編譯器是MSVC&#xff0c;在debug的時候想查看一個eigen數組的數值&#x…

【51單片機】【protues仿真】基于51單片機八路搶答器數碼管系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、數碼管顯示 2、主持人按下開始&#xff0c;8位選手開始搶答 3、第一次使用要設置搶答時間&#xff0c;支持掉電存儲 4、選手搶答成功&#xff0c;數碼管會顯示其號碼 5、按下主…

深度學習:CUDA、PyTorch下載安裝

目錄 一、安裝準備 二、安裝CUDA 2.1 查看本機支持的 CUDA 版本及相關信息 2.2 卸載CUDA(可選) 2.3 下載cuda安裝包 2.4 安裝 2.5 配置環境變量 三、安裝PyTorch 3.1 版本選擇 3.2 下載安裝 方法一&#xff1a;直接安裝&#xff08;不建議&#xff0c;網差的話會死機…

MyBatis-Plus 快速入門 -常用注解

目錄 1. 常用注解 TableName TableId TableField 2. IdType 枚舉 3. 使用 TableField 的常見場景 4. 完整示例 5. 總結 在使用 MyBatis-Plus 的過程中&#xff0c;我們經常會用到一些注解來完成實體類與數據庫表字段之間的映射關系。本文將帶你快速入門&#xff0c;了解…

2025-08-23Excel 條件高亮工具,秒高亮顯示符合篩選條件的行數據

Excel 條件高亮工具&#xff0c;秒高亮顯示符合篩選條件的行數據 先看圖【加班終結者】Excel 條件高亮工具&#xff08;試用版&#xff09; ——讓錯誤數據一秒現形&#xff0c;免費先爽 30 次&#xff01; 你是不是也這樣&#xff1f; ? 財務對賬&#xff0c;1000 行工資表里…

vue 一鍵打包上傳

npm run build之后&#xff0c;將dist文件夾自動壓縮&#xff0c;通過ssh自動連接服務器&#xff0c;把壓縮包放到指定目錄下&#xff0c;然后自動解壓根目錄創建gulpfile.js文件const gulp require(gulp); const GulpSSH require(gulp-ssh); const archiver require(archiv…

【Qt調試】無法查看QString內容

環境Qt版本&#xff1a;6.9.1問題Qt creator進入斷點&#xff0c;Expressions不能查看變量&#xff08;類型&#xff1a;QString&#xff09;的內容。解決方法選擇變量右鍵&#xff0c;勾選【Use Debugging Helpers】

防爆自動氣象監測設備:高危環境的 “安全堡壘”

防爆自動氣象監測設備&#xff1a;高危環境的 “安全堡壘” 柏峰【BF-FB】在化工園區、油氣田、礦山等高危行業領域&#xff0c;絲毫馬虎不得。而氣象條件&#xff0c;這個看似平常的因素&#xff0c;實則在安全生產中扮演著舉足輕重的角色。防爆自動氣象監測設備的出現&#x…

《C++進階:引用補充、內聯函數與nullptr 核心用法》

&#x1f618;個人主頁&#xff1a;Cx330? &#x1f440;個人簡介&#xff1a;一個正在努力奮斗逆天改命的二本覺悟生 &#x1f4d6;個人專欄&#xff1a;《C語言》《LeetCode刷題集》《數據結構-初階》《C知識分享》 &#x1f31f;人生格言&#xff1a;心向往之行必能至 前言…

通過python程序將實時監測數據寫入excel軟件進行保存是常用和非常實用的功能,本文教會大家怎么去搞定此功能

目錄 一、功能介紹 二、具體的程序示例 三、實際應用建議 一、功能介紹 本方案的核心功能是持續監聽一個數據源&#xff08;如傳感器、API接口、消息隊列、其他應用程序等&#xff09;&#xff0c;將獲取到的實時數據流以追加的方式寫入到Excel文件中。同時&#xff0c;方案…

在 Linux 中全局搜索 Word 文檔內容的完整指南

文章目錄 為什么不能直接使用 grep 搜索 Word 文檔? 解決方案:使用 Pandoc 轉換后搜索 步驟 1:安裝 Pandoc 步驟 2:創建搜索腳本 步驟 3:執行搜索(兩者選其一) 一行命令解決方案 高級用法與優化 1. 忽略大小寫搜索 2. 顯示匹配內容 3. 性能優化 注意事項 結論 在日常工作中…

基于STM32單片機智能農業大棚控制系統-插件款 DIY 設計開源(實物+程序+原理圖+其他資料)

目錄 一、項目成品展示 二、功能介紹 三、硬件組成 四、PCB展示 五、程序設計 六、資料分享 資料獲取 查看主頁介紹&#xff1a;兆龍電子單片機設計 一、項目成品展示 項目成品圖片展示&#xff1a; 嗶哩嗶哩視頻鏈接&#xff1a; STM32單片機智能農業大棚控制系統-插件…