掌握PyTorch數據預處理(一):讓模型表現更上一層樓!!!

引言

在PyTorch中,數據預處理是模型訓練過程中不可或缺的一環。通過精心優化數據,我們能夠確保模型在訓練時能夠更高效地學習,從而在實際應用中達到更好的性能。今天,我們將深入探討一些常用的PyTorch數據預處理技巧,幫助你充分發揮數據的潛力,為模型訓練打下堅實的基礎。

常用數據預處理方法

數據標準化

數據標準化的目的是將數據轉換成均值為0,標準差為1的形式,這樣可以使得數據分布更加均勻,減少數據的可變性。

在PyTorch中,可以使用torchvision.transforms.Normalize來進行數據標準化。Normalize函數需要傳入兩個參數,分別為mean和std。mean為數據集的均值,std為數據集的標準差。通過將數據減去mean,再除以std,就可以得到標準化的數據。

下面是一個使用torchvision.transforms.Normalize進行數據標準化的例子:

import torchvision.transforms as transforms  
from PIL import Image  
import numpy as np  # 加載圖像  
image = Image.open("lena.png")  # 將圖像轉換為numpy數組  
image_array = np.array(image)  # 定義預處理步驟  
preprocess = transforms.Compose([  transforms.ToTensor(),  transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  
])  # 對圖像進行預處理  
preprocessed_image = preprocess(image_array)

數據增強

數據增強是一種通過應用各種隨機變換來生成新數據的技術,可以增加模型的泛化能力。對于圖像數據,可以使用torchvision.transforms模塊中的函數來隨機旋轉、裁剪、翻轉圖像等,從而增加模型的泛化能力。

下面是一個示例代碼,用于對同目錄下的lena.png圖片進行數據增強:

import torchvision.transforms as transforms
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt# 加載圖像
image = Image.open("lena.png")# 定義數據增強變換
transform = transforms.Compose([transforms.RandomRotation(20),  # 隨機旋轉20度# transforms.RandomCrop(32),  # 隨機裁剪出32x32的區域transforms.RandomHorizontalFlip(),  # 隨機水平翻轉
])# 對圖像進行數據增強
enhanced_image = transform(image)# 將PIL.Image對象轉換為numpy數組
numpy_image = np.array(enhanced_image)# 顯示圖像
plt.imshow(numpy_image)
plt.axis("off")
plt.show()

運行結果:
在這里插入圖片描述

To Tensor

transforms.ToTensor()可以將PIL Image或者ndarray轉化為tensor,并且將Intensity的取值范圍轉化為[0.0, 1.0]之間 。

示例代碼如下:

import torchvision.transforms as transforms  
from PIL import Image  
import numpy as np  # 加載圖像  
image = Image.open("lena.png")  # 將圖像轉換為numpy數組  
image_array = np.array(image)  # 這步沒有也沒問題# 定義預處理步驟  
preprocess = transforms.Compose([  transforms.ToTensor()
])  # 對圖像進行預處理  
preprocessed_image = preprocess(image_array)

one-hot編碼

在機器學習中,分類問題的標簽通常是以整數的形式表示的。然而,為了使模型能夠更好地處理這些標簽,我們可以使用一種稱為"one-hot編碼"的技術將它們轉換為二進制向量。在PyTorch中,可以使用torch.nn.functional.one_hot來實現這一操作。

在one-hot編碼中,每個標簽都被表示為一個唯一的二進制向量。假設我們有N個類別的標簽,那么每個標簽都會被轉換為長度為N的二進制向量,其中只有該標簽對應的索引位置上的值為1,其余位置上的值為0。

下面是一個示例代碼,展示了如何在PyTorch中使用torch.nn.functional.one_hot來實現標簽的one-hot編碼:

import torch  
import torch.nn.functional as F  # 假設我們有5個類別的標簽  
num_classes = 5  # 創建一個標簽的張量,其中包含了3個樣本的標簽  
# 每個標簽都是一個整數,取值范圍從0到num_classes-1  
labels = torch.tensor([1, 3, 2])  # 使用torch.nn.functional.one_hot將標簽轉換為one-hot編碼的二進制向量  
one_hot_labels = F.one_hot(labels, num_classes)  # 輸出one-hot編碼的標簽張量  
print(one_hot_labels)

運行結果:
在這里插入圖片描述

調整圖像大小

在處理圖像數據時,一個常見的需求是將所有圖像調整為相同的大小,以便輸入到神經網絡中。這樣做可以避免因為輸入圖像尺寸不同而帶來的麻煩,同時提高神經網絡的訓練效率。在PyTorch中,可以使用torchvision.transforms.Resize輕松實現這一需求。

下面是一個示例代碼,展示了如何使用torchvision.transforms.Resize將圖像調整為相同的大小:

from torchvision import transforms
from PIL import Image# 加載圖像
image1 = Image.open("lena.png")
print(image1.size)# 創建轉換操作
transform = transforms.Resize((224, 224)) # 將所有圖像調整為224x224的大小# 對圖像進行轉換
resized_image1 = transform(image1)
print(resized_image1.size)

運行結果
在這里插入圖片描述

結束語

如果本博文對你有所幫助/啟發,可以點個贊/收藏支持一下,如果能夠持續關注,小編感激不盡~
如果有相關需求/問題需要小編幫助,歡迎私信~
小編會堅持創作,持續優化博文質量,給讀者帶來更好de閱讀體驗~

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

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

相關文章

C++如何通過調用ffmpeg接口對H264文件進行編碼和解碼

C可以通過調用FFmpeg的API來對H264文件進行編碼和解碼。下面是一個簡單的例子。 首先需要在代碼中包含FFmpeg的頭文件&#xff1a; extern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale…

Linux系統編程:進程間通信總結

管道 在Linux中&#xff0c;管道是一種進程間通信方式&#xff0c;它允許一個進程&#xff08;寫入端&#xff09;將其輸出直接連接到另一個進程&#xff08;讀取端&#xff09;的輸入。從本質上說&#xff0c;管道也是一種文件&#xff0c;但它又和一般的文件有所不同。 具體…

Docker部署開源分布式任務調度平臺DolphinScheduler并實現遠程訪問辦公

文章目錄 前言1. 安裝部署DolphinScheduler1.1 啟動服務 2. 登錄DolphinScheduler界面3. 安裝內網穿透工具4. 配置Dolphin Scheduler公網地址5. 固定DolphinScheduler公網地址 前言 本篇教程和大家分享一下DolphinScheduler的安裝部署及如何實現公網遠程訪問&#xff0c;結合內…

前端知識筆記(二十七)———CSS核心功能手冊:從熟悉到精通

參考HTML代碼 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

12.9_黑馬數據結構與算法筆記Java

目錄 057 多路遞歸 e03 楊輝三角2 thinking&#xff1a;二維數組的動態初始化&#xff1f; 057 多路遞歸 e03 楊輝三角3 058 鏈表 e01 反轉單向鏈表1 058 鏈表 e01 反轉單向鏈表2 058 鏈表 e01 反轉單向鏈表3 遞歸 058 鏈表 e01 反轉單向鏈表4 為什么是returnn1呢&…

【Cisco Packet Tracer】路由器 NAT實驗

NAT的實現方式有三種&#xff0c;即靜態轉換Static Nat、動態轉換Dynamic Nat和端口多路復用OverLoad。 靜態轉換是指內部本地地址一對一轉換成內部全局地址&#xff0c;相當內部本地的每一臺PC都綁定了一個全局地址。一般用于在內網中對外提供服務的服務器。 [3] 動態轉換是指…

C++ 迭代器

迭代器 迭代器類似于指針類型&#xff0c;也提供了對對象的間接訪問。 就迭代器而言&#xff0c;其對象是容器中的元素或 string 對象中的字符。 獲取迭代器 容器的迭代器類型 使用作用域運算符來說明我們希望使用的類型成員&#xff1b;例&#xff1a;string::iterator it…

探秘MSSQL存儲過程:功能、用法及實戰案例

在現代軟件開發中&#xff0c;高效地操作數據庫是至關重要的。而MSSQL&#xff08;Microsoft SQL Server&#xff09;作為一款強大的關系型數據庫管理系統&#xff0c;為我們提供了豐富的功能和工具來處理數據。其中&#xff0c;MSSQL存儲過程是一項強大而又常用的功能&#xf…

改進YOLOv8注意力系列一:結合ACmix、Biformer、BAM注意力機制

???改進YOLOv8注意力系列一:結合ACmix、Biformer、BAM注意力機制 代碼ACmixBiFormerBAMBlock加入方法各種yaml加入結構本文提供了改進 YOLOv8注意力系列包含不同的注意力機制以及多種加入方式,在本文中具有完整的代碼和包含多種更有效加入YOLOv8中的yaml結構,讀者可以獲…

C++ 的關鍵字(保留字)介紹

一.C中部分關鍵字的用法 1. auto 關鍵字auto是C11引入的&#xff0c;它可以用于變量聲明和函數返回類型的推導。當你不關心變量的具體類型時&#xff0c;可以使用auto來讓編譯器根據初始化表達式推導出變量的類型。這樣可以簡化代碼&#xff0c;提高可讀性。 1.在for循環中遍…

Mysql索引一篇就夠了

索引 定義 索引是對數據庫表中一列或者多列的值進行排序的結構。 目的 數據庫索引好比一本書的目錄&#xff0c;提高查詢效率。但是為表設置索引要付出相應的代價&#xff1a; 增加了數據庫的存儲空間 在插入和修改時需花費更多的時間&#xff08;因為索引也要隨之變動&#…

一、C#筆記

1.注釋 /*多行注釋*/class HelloWorld{ void Hello(){Console.WriteLine("Hello!");//單行注釋}} 2.理解語句 2.1方法、語法、語義 2.2使用標識符 標識符語法規則&#xff1a; 只能使用字母&#xff08;大寫和小寫&#xff09;、數字和下劃…

C++相關閑碎記錄(5)

1、容器提供的類型 2、Array Array大小固定&#xff0c;只允許替換元素的值&#xff0c;不能增加或者移除元素改變大小。Array是一種有序集合&#xff0c;支持隨機訪問。 std::array<int, 4> x; //elements of x have undefined value std::array<int, 5> x {…

滲透測試——七、網站漏洞——命令注入和跨站請求偽造(CSRF)

滲透測試 一、命令注入二、跨站請求偽造(CSRF)三、命令注入頁面之注人測試四、CSRF頁面之請求偽造測試 一、命令注入 命令注入(命令執行) 漏洞是指在網頁代碼中有時需要調用一些執行系統命令的函數例如 system()、exec()、shell_exec()、eval()、passthru()&#xff0c;代碼未…

基于ssm在線云音樂系統的設計與實現論文

摘 要 隨著移動互聯網時代的發展&#xff0c;網絡的使用越來越普及&#xff0c;用戶在獲取和存儲信息方面也會有激動人心的時刻。音樂也將慢慢融入人們的生活中。影響和改變我們的生活。隨著當今各種流行音樂的流行&#xff0c;人們在日常生活中經常會用到的就是在線云音樂系統…

走迷宮(詳細分析)

目錄 一、課題描述 輸入樣例&#xff1a; 輸出樣例&#xff1a; 二、需求分析 輸入的形式和輸入值的范圍&#xff1a; 輸出的形式&#xff1a; 程序所能達到的功能&#xff1a; 三、概要設計 四、流程圖 五 、代碼詳細注釋 六、測試數據和結果 一、課題描述 以一個…

freeswitch webrtc video_demo客戶端進行MCU的視頻會議

系統環境 一、編譯服務器和加載模塊 二、下載編譯指定版本video_demo 三、配置verto.conf.xml 1.修改配置文件 2.重新啟動 四、MCU通話測試 1.如何使用video_demo 2.測試結果 五、MCU的通話原理及音頻/視頻/布局/管理員等參數配置 附錄 freeswitch微信交流群 系統環境 lsb_rel…

MyBatis處理映射關系

在Mybatis實現數據處理過程中&#xff0c;字段名符合數據庫的規則&#xff0c;屬性一般為駝峰規則&#xff0c;因此字段名和屬性名通常不一致&#xff0c;此時可以通過以下兩種方式對數據庫字段進行映射處理&#xff1a; 為字段起別名&#xff0c;保證和實體類中的屬性名一致在…

lv11 嵌入式開發 IIC(下) 20

目錄 1 Exynos4412下IIC控制器介紹 1.1 總覽 1.2 特征 1.3 工作框圖 1.4 其他內容介紹 1.5 四種工作模式寄存器流程 2 IIC寄存器詳解 2.1 概述 2.2 控制寄存器 2.3 狀態寄存器 2.4 地址寄存器 2.5 數據寄存器 2.6 其他寄存器 3 MPU06050 3.1 簡介 3.2 MPU6050主…

HJ103 Redraiment的走法

題目&#xff1a; HJ103 Redraiment的走法 題解&#xff1a; dfs 暴力搜索 枚舉數組元素&#xff0c;作為起點如果后續節點大于當前節點&#xff0c;繼續向后搜索記錄每個起點的結果&#xff0c;求出最大值 public int getLongestSub(int[] arr) {int max 0;for (int i 0…