Python Day40

Task:
1.彩色和灰度圖片測試和訓練的規范寫法:封裝在函數中
2.展平操作:除第一個維度batchsize外全部展平
3.dropout操作:訓練階段隨機丟棄神經元,測試階段eval模式關閉dropout
作業:仔細學習下測試和訓練代碼的邏輯,這是基礎,這個代碼框架后續會一直沿用,后續的重點慢慢就是轉向模型定義階段了。

1. 彩色和灰度圖片測試和訓練的規范寫法(封裝在函數中):

  • 目的: 將數據預處理和加載過程封裝成函數,提高代碼的可讀性、可維護性和復用性。

  • 關鍵步驟:

    • 數據加載: 使用 torchvision.datasets 或自定義數據集類加載圖像數據。
    • 數據預處理: 使用 torchvision.transforms 定義一系列圖像變換,例如:
      • Resize():調整圖像大小。
      • ToTensor():將圖像轉換為 Tensor,并將像素值歸一化到 [0, 1] 范圍。
      • Normalize():對圖像進行標準化,使其具有零均值和單位方差。
      • Grayscale():將彩色圖像轉換為灰度圖像。
    • 數據增強(僅訓練集): 在訓練集上應用隨機變換,例如:
      • RandomHorizontalFlip():隨機水平翻轉圖像。
      • RandomRotation():隨機旋轉圖像。
      • RandomCrop():隨機裁剪圖像。
    • 數據加載器: 使用 torch.utils.data.DataLoader 創建數據加載器,用于批量加載數據,并進行 shuffle 和多線程處理。
  • 函數示例:

    import torch
    import torchvision
    from torchvision import transforms
    from torch.utils.data import DataLoaderdef load_data(data_dir, batch_size, is_train=True, grayscale=False):"""加載圖像數據,并進行預處理。Args:data_dir (str): 數據集目錄。batch_size (int): 批量大小。is_train (bool): 是否為訓練集。grayscale (bool): 是否轉換為灰度圖像。Returns:torch.utils.data.DataLoader: 數據加載器。"""transform_list = []if is_train:transform_list.append(transforms.RandomHorizontalFlip())transform_list.append(transforms.RandomRotation(10))  # 隨機旋轉transform_list.append(transforms.Resize((224, 224)))  # 調整大小if grayscale:transform_list.append(transforms.Grayscale())transform_list.append(transforms.ToTensor())transform_list.append(transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])) # 標準化transform = transforms.Compose(transform_list)dataset = torchvision.datasets.ImageFolder(data_dir, transform=transform)data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=is_train, num_workers=4)return data_loader
    

2. 展平操作:除第一個維度 batchsize 外全部展平

  • 目的: 將卷積層或池化層的輸出轉換為一維向量,以便輸入到全連接層。

  • 方法: 使用 torch.flatten(x, start_dim=1) 函數,從第二個維度開始展平。

  • 示例:

    import torchx = torch.randn(32, 64, 7, 7)  # batch_size=32, 64個特征圖, 7x7大小
    x_flattened = torch.flatten(x, start_dim=1)  # 展平除 batch_size 以外的所有維度
    print(x_flattened.shape)  # 輸出: torch.Size([32, 3136])  (64 * 7 * 7 = 3136)
    

3. Dropout 操作:訓練階段隨機丟棄神經元,測試階段 eval 模式關閉 dropout

  • 目的: 防止過擬合,提高模型的泛化能力。

  • 原理: 在訓練過程中,隨機將一部分神經元的輸出設置為 0,迫使網絡學習更魯棒的特征。

  • 實現: 使用 torch.nn.Dropout(p=0.5) 層,其中 p 是丟棄概率。

  • 關鍵點:

    • 訓練階段: model.train() 模式下,Dropout 層會隨機丟棄神經元。
    • 測試階段: model.eval() 模式下,Dropout 層會被禁用,所有神經元都會參與計算。 這確保了模型在測試時使用完整的網絡結構進行預測。
  • 示例:

    import torch
    import torch.nn as nnclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.fc1 = nn.Linear(100, 50)self.dropout = nn.Dropout(p=0.5)self.fc2 = nn.Linear(50, 10)def forward(self, x):x = torch.relu(self.fc1(x))x = self.dropout(x)x = self.fc2(x)return xmodel = MyModel()# 訓練階段
    model.train()
    x = torch.randn(32, 100)
    output = model(x)# 測試階段
    model.eval()
    with torch.no_grad():  # 禁用梯度計算x = torch.randn(32, 100)output = model(x)
    

總結:

我理解了數據加載和預處理的重要性,以及如何使用 torchvision.transformstorch.utils.data.DataLoader 來實現。 我也理解了展平操作的必要性,以及 Dropout 層在訓練和測試階段的不同行為。 這些都是構建深度學習模型的基礎,我會繼續深入學習和實踐。

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

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

相關文章

WordPress_suretriggers 權限繞過漏洞復現(CVE-2025-3102)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 前…

基于Spring Boot 電商書城平臺系統設計與實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

LeetCode 39.組合總和:回溯法與剪枝優化的完美結合

一、問題本質與形式化定義 1.1 題目形式化描述 輸入:無重復整數數組candidates、目標值target輸出:所有和為target的組合集合,滿足: 元素可重復使用組合內元素非降序(避免重復解)解集無重復組合 1.2 問…

windows11安裝編譯QtMvvm

windows11安裝編譯QtMvvm 1 從github下載代碼2 官方的Download/Installtion3 自行構建編譯QtMvvm遇到的問題3.1 `qmake`問題執行命令報錯原因分析qmake報錯:找不到編譯器 cl解決方案3.2 `make qmake_all`問題執行命令報錯原因分析make命令未識別解決方案3.3 缺少`perl`問題執行…

unix/linux source 命令,其歷史爭議、兼容性、生態、未來展望

現在把目光投向unix/linux source命令的歷史爭議、兼容性、生態和未來展望,這能讓我們更全面地理解一個技術點在更廣闊的圖景中所處的位置。 一、歷史爭議與設計權衡 雖然 source (或 .) 命令功能強大且不可或缺,但在其發展和使用過程中,也存在一些微妙的爭議或設計上的權衡…

開發時如何通過Service暴露應用?ClusterIP、NodePort和LoadBalancer類型的使用場景分別是什么?

一、Service核心概念 Service通過標簽選擇器(Label Selector)關聯Pod,為動態變化的Pod集合提供穩定的虛擬IP和DNS名稱,主要解決: 服務發現負載均衡流量路由 二、Service類型詳解 1. ClusterIP(默認類型…

從線性代數到線性回歸——機器學習視角

真正不懂數學就能理解機器學習其實是個神話。我認為,AI 在商業世界可以不懂數學甚至不懂編程也能應用,但對于技術人員來說,一些基礎數學是必須的。本文收集了我認為理解學習本質所必需的數學基礎,至少在概念層面要掌握。畢竟&…

華為IP(7)

端口隔離技術 產生的背景 1.以太交換網絡中為了實現報文之間的二層隔離,用戶通常將不同的端口加入不同的VLAN,實現二層廣播域的隔離。 2.大型網絡中,業務需求種類繁多,只通過VLAN實現二層隔離,會浪費有限的VLAN資源…

Docker Desktop無法在windows低版本進行安裝

問題描述 因工作需要,現在一臺低版本的window系統進行Docker Desktop的安裝,但是安裝過程當中出現了報錯信息 系統版本配置 原因分析: 關于本機查看了系統的版本號,版本號如下為1909,但是docker Desktop要求的最低的win10版本…

深入理解 Maven 循環依賴問題及其解決方案

在 Java 開發領域,Maven 作為主流構建工具極大簡化了依賴管理和項目構建。然而**循環依賴(circular dependency)**問題仍是常見挑戰,輕則導致構建失敗,重則引發類加載異常和系統架構混亂。 本文將從根源分析循環依賴的…

Git 全平臺安裝指南:從 Linux 到 Windows 的詳細教程

目錄 一、Git 簡介 二、Linux 系統安裝指南 1、CentOS/RHEL 系統安裝 2、Ubuntu/Debian 系統安裝 3、Windows 系統安裝 四、安裝后配置(后面會詳細講解,現在了解即可) 五、視頻教程參考 一、Git 簡介 Git 是一個開源的分布式版本控制系…

微服務-Sentinel

目錄 背景 Sentinel使用 Sentinel控制臺 Sentinel控制規則 Sentinel整合OpenFeign 背景 在微服務項目架構中,存在多個服務相互調用場景,在某些情況下某個微服務不可用時,上游調用者若一直等待,會產生資源的消耗,極端情…

智慧零工平臺前端開發實戰:從uni-app到跨平臺應用

智慧零工平臺前端開發實戰:從uni-app到跨平臺應用 本文將詳細介紹我如何使用uni-app框架開發一個支持微信小程序和H5的零工平臺前端應用,包含技術選型、架構設計、核心功能實現及部署經驗。 前言 在當今移動互聯網時代,跨平臺開發已成為提高開發效率的重要手段。本次我選擇…

Qt實現csv文件按行讀取的方式

Qt實現csv文件按行讀取的方式 場景:我有一個保存數據的csv文件,文件內保存的是按照行保存的數據,每行數據是以逗號為分隔符分割的文本數據。如下圖所示: 現在,我需要按行把這些數據讀取出來。 一、使用QTextStream文本流的方式讀取 #include <QFile>void readfil…

day17 leetcode-hot100-34(鏈表13)

23. 合并 K 個升序鏈表 - 力扣&#xff08;LeetCode&#xff09; 1.數組排序 思路 &#xff08;1&#xff09;將全部的節點存儲到數組中 &#xff08;2&#xff09;對數組進行排序 &#xff08;3&#xff09;最后創建一個全新的鏈表 具體代碼 /*** Definition for singly…

docker運行程序Killed異常排查

問題描述 我最近開發了一個C 多線程程序&#xff0c;測試沒有問題&#xff0c;封裝docker測試也沒有問題&#xff0c;然后提交給客戶了&#xff0c;然后在他那邊測試有問題&#xff0c;不定時、不定位置異常中斷&#xff0c;以前一直認為只要封裝了docker就萬事大吉&#xff0…

爬蟲的幾種方式(使用什么技術來進行一個爬取數據)

在網頁數據爬取中&#xff0c;確實存在多種數據呈現和獲取形式&#xff0c;遠不止靜態HTML解析和簡單JS渲染。理解這些形式對于應對不同的反爬機制至關重要&#xff1a; 主要數據獲取形式與應對策略 純靜態HTML (基礎形式) 特點&#xff1a; 數據直接嵌入在服務器返回的初始HT…

MyBatis-Plus高級用法:最優化持久層開發

MyBatis-Plus 是 MyBatis 的增強工具&#xff0c;旨在簡化開發、提高效率并保持 MyBatis 的靈活性。本文將詳細介紹 MyBatis-Plus 的高級用法&#xff0c;幫助開發者最優化持久層開發。 一、MyBatis-Plus 簡介 MyBatis-Plus 是一個 ORM 框架&#xff0c;提供了 CRUD 接口、條…

【C++/Linux】TinyWebServer前置知識之IP協議詳解

目錄 IPv4地址 分類 IP數據報分片 IP 協議在傳輸數據報時&#xff0c;將數據報分為若干分片&#xff08;小數據報&#xff09;后進行傳輸&#xff0c;并在目的系統中進行重組&#xff0c;這一過程稱為分片&#xff08;Fragmentation&#xff09;。 IP模塊工作流程?編輯 I…

【辦公類-22-05】20250601Python模擬點擊鼠標上傳CSDN12篇

、 背景需求: 每周為了獲取流量券,每天上傳2篇,獲得1500流量券,每周共上傳12篇,才能獲得3000和500的券。之前我用UIBOT模擬上傳12篇。 【辦公類-22-04】20240418 UIBOT模擬上傳每天兩篇,獲取流量券,并刪除內容_csdn 每日任務流量券-CSDN博客文章瀏覽閱讀863次,點贊18…