加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 書籍介紹
    • 01、PyTorch自帶的數(shù)據集使用
    • 02、自定義數(shù)據集的使用
    • 03、PyTorch中的數(shù)據預處理模塊transforms
    • 免費贈書 活動規(guī)則
  • 推薦器件
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

留言送書 | 《深度學習與人工智能實戰(zhàn)》

06/19 17:13
3770
  • 58評論
閱讀需 18 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

免費贈書 活動規(guī)則:本文下方評論留言,分享您對此書籍的需求或看法/心得(不少于20字),我們將挑選最有價值10位朋友留言,贈送圖書1本。

本次免費贈書活動結束,感謝大家的參與~!

本次贈書名單:

1、eefocus_3985463
2、eefocus_3891719
3、eefocus_3985474
4、eefocus_3985492
5、eefocus_3985526
6、eefocus_3972093
7、eefocus_3939242
8、eefocus_3939857
9、liu123can
10、chief0411

書籍介紹

▊《深度學習人工智能實戰(zhàn)》,張重生 編著

本書按照知識由淺入深、循序漸進的規(guī)律編寫而成。內容分為三大部分,第一部分是Python和PyTorch編程基礎,介紹常用的函數(shù)及其用法;第二部分是初級深度學習算法與技術,含基礎卷積神經網絡的實現(xiàn),目標識別、人臉表情識別等實戰(zhàn);第三部分是高級深度學習算法和技術,含孿生神經網絡、度量學習、蒸餾學習、目標檢測、圖像分割、圖像生成等技術及實戰(zhàn)。本書的附錄還提供了常用PyTorch函數(shù)速查手冊。本書根據深度學習技術的特點,將內容劃分為數(shù)據準備、神經網絡模型實現(xiàn)、損失函數(shù)實現(xiàn)、整體訓練流程和效果展示五部分。這種章節(jié)內容安排方式邏輯清楚,可操作性強、更易理解。

在深度學習處理復雜任務時,數(shù)據預處理是至關重要的一環(huán)。PyTorch作為一款熱門的深度學習框架,提供了豐富的數(shù)據處理工具。通過PyTorch,開發(fā)者可以輕松地完成數(shù)據的加載、清洗、增強、轉換等操作,以確保數(shù)據的質量并適應模型的需求。這些操作對于提高模型的訓練效率和泛化能力具有重要意義。

01、PyTorch自帶的數(shù)據集使用

在深度學習中,常用的數(shù)據集有手寫數(shù)字數(shù)據集MNIST,小圖像分類數(shù)據集CIFAR10和CIFAR100,人臉表情數(shù)據集JAFFE,及Pascal VOC數(shù)據集等,而COCO和ImageNet數(shù)據集是兩個超大規(guī)模的數(shù)據集。以MNIST數(shù)據集為例,該數(shù)據集由手寫數(shù)字圖像構成。訓練集有60000幅圖像,測試集有10000幅圖像。每幅MNIST圖像是28×28像素的灰度圖像,包含一個手寫數(shù)字,圖像的標簽為0~9之間的某個數(shù)字。在torchvision包的datasets模塊,有多個Pytorch自帶的數(shù)據集可供使用。以手寫數(shù)字數(shù)據集MNIST為例,使用方法如下:

# 使用torchvision.datasets包下的MNIST數(shù)據集類
from torchvision.datasets import MNIST
from torchvision import transforms
from torch.utils.data import DataLoader

# 定義圖像預處理操作
transform = transforms.Compose([
transforms.Resize(32),
transforms.RandomHorizontalFlip(0.5),
transforms.ToTensor()
])
train_dataset = MNIST(
root='./data',# 數(shù)據集的存放或下載地址
????transform=transform,#數(shù)據預處理
????train=True,# 是否為訓練集
????download=True# 是否下載,如果上述地址已存在該數(shù)據集則不下載
)
test_dataset = MNIST(
root='./data',
transform=transform,
train=True,
download=True
)
# 將預處理好的數(shù)據集變?yōu)榭傻鷮ο?,每次使用一個batch數(shù)量的數(shù)據
train_loader = DataLoader(
dataset=train_dataset,# 數(shù)據集
????batch_size=16,# batch大小
????shuffle=True# 是否打亂順序后取出
)
test_loader = DataLoader(
dataset=test_dataset,
batch_size=16,
shuffle=False
)

訓練網絡模型時,使用train_loader或test_loader,每次可取出一個batch大小的數(shù)據。

# 查看預處理后的一個MNIST數(shù)據及其標簽
print(train_dataset[0])
# 查看預處理后的一個MNIST數(shù)據的形狀
print(train_dataset[0][0].shape)
輸出:
(tensor([[[0., 0., 0., ?..., 0., 0., 0.],
[0., 0., 0., ?..., 0., 0., 0.],
[0., 0., 0., ?..., 0., 0., 0.],
...,
[0., 0., 0., ?..., 0., 0., 0.],
[0., 0., 0., ?..., 0., 0., 0.],
[0., 0., 0., ?..., 0., 0., 0.]]]), 5)
torch.Size([1, 32, 32])

# 得到一個batch數(shù)量的MNIST數(shù)據及其對應的標簽
batch_data, batch_label = next(iter(train_loader))
# 查看一個batch數(shù)據的形狀
print(batch_data.shape)
# 查看一個batch數(shù)據對應的標簽的形狀
print(batch_label.shape)
輸出:
torch.Size([16, 1, 32, 32])
torch.Size([16])

一個batch的shape為[N, C, H, W],其中“N”為batch size,“C”為通道數(shù),“H”和“W”和為高度和寬度。假定訓練集的batch_size設置為16,所以 “N”等于16;因MNIST數(shù)據集中的圖像均為單通道灰度圖,所以“C”等于1;在圖像預處理時,將圖像的尺寸Resize為32×32大小,所以這里的“W”和“H”等于32。使用以下代碼可以將train_loader中一個batch的數(shù)據進行可視化,結果如圖2.4所示。

import matplotlib.pyplot as plt
# 得到一個batch數(shù)量的MNIST數(shù)據及其對應的標簽
batch_data, batch_label = next(iter(train_loader))
fig = plt.figure()
for i in range(6):
plt.subplot(2, 3, i+1)
plt.imshow(batch_data[i][0], cmap='gray')
plt.title("Label: {}".format(batch_label[i]))
plt.show()

可以注意到,圖1右下角標簽值為7的圖像數(shù)據經過了水平翻轉處理。除MNIST數(shù)據集之外,其他經典數(shù)據集如CIFAR10和CIFAR100等也可以在torchvision.datasets模塊中找到,其使用方法和MNIST數(shù)據集相同。

圖1?MNIST預處理后的數(shù)據示例

02、自定義數(shù)據集的使用

除了這些經典數(shù)據集外,有時還需要根據實際任務使用指定的數(shù)據集。自定義的數(shù)據集MyDataset類需要繼承torch.utils.Dataset抽象類,并實現(xiàn)三個方法,分別是:__init__()方法,實現(xiàn)數(shù)據集的初始化;__len__()方法,記錄數(shù)據集的大??;__getitem__()方法,通過索引獲取數(shù)據和標簽。例如:

import torch
from torch.utils.data import Dataset

class MyDataset(Dataset):
# 初始化方法
????def __init__(self):
# 由3個4維向量組成的模擬數(shù)據集
????????self.data_list = torch.tensor([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 0, 1]])
# 對應的標簽
????????self.label_list = torch.tensor([0, 1, 2])

def __len__(self):
return self.data_list.shape[0]

# 根據索引每次取一個數(shù)據
????def __getitem__(self, index):
data = self.data_list[index]
label = self.label_list[index]
return data, label

獲取自定義數(shù)據集中的數(shù)據:

# 獲取自定義數(shù)據集的數(shù)據
dataset = MyDataset()
# 取出第一個數(shù)據及其標簽
print(dataset[0])
輸出:
(tensor([0, 1, 2, 3]), tensor(0))

在torchvision.datasets模塊中,還有一個通用的數(shù)據集加載器ImageFolder。當數(shù)據文件依據標簽劃分在不同的文件夾中時,例如:

—————data
|—————train
| ???|——————class1
| ???| ??????|————class1_data1
| ???| ??????|————class1_data2
| ???| ??????|————class1_···
| ???|——————class2
| ???| ??????|————class2_data1
| ???| ??????|————class2_data2
| ???| ??????|————class2_···
| ???···
|—————test

此時,可以使用torchvision.datasets.ImageFolder來直接構造數(shù)據集,代碼如下:

from torchvision.datasets import ImageFolder
train_dataset = ImageFolder(
root="./data/train/",
transform=transform
)
test_dataset = ImageFolder(
root="./data/test/",
transform=transform
)

03、PyTorch中的數(shù)據預處理模塊transforms

torchvision包中的transforms模塊,提供了對PIL Image對象和Tensor對象的常用處理操作,可以方便地對圖像數(shù)據進行預處理。導入該模塊:

# 導入transforms模塊
from torchvision import transforms

常用的操作如下列所示:

# PIL圖像調整為給定大小
transforms.Resize(size)
# 依據給定的sizePIL圖像中心裁剪
transforms.CenterCrop(size)
# PIL圖像上隨機裁剪出給定大小
transforms.RandomCrop(size)
# PIL圖像裁剪為隨機大小和寬高比,然后resize到給定大小
transforms.RandomResizedCrop(size)
# PIL圖像依概率p水平翻轉,p默認值為0.5
transforms.RandomHorizontalFlip(p)
# PIL圖像四周使用fill值進行邊界填充,填充像素個數(shù)為padding
transforms.Pad(padding, fill)
# PIL圖像進行高斯模糊
transforms.GaussianBlur(kernel_size, sigma)
# 調整PIL圖像的亮度、對比度、飽和度、色調
transforms.ColorJitter(brightness, contrast, saturation, hue)
# PIL圖像依概率p隨即變?yōu)榛叶葓D,p默認值為0.5
transforms.RandomGrayscale(p)
# PIL圖像或者ndarray轉換為Tensor,并且歸一化至[0-1]
transforms.ToTensor()
# 用平均值和標準偏差歸一化張量
transforms.Normalize(mean, std)
# Tensor或者ndarray數(shù)據轉換為PIL圖像
transforms.ToPILImage()

如果想要對數(shù)據集進行多個預處理操作,可以使用transforms.Compose()函數(shù)將這些操作串接起來。例如:

'''
對數(shù)據集中的每個圖像執(zhí)行:
1)大小調整至32×32大小,
2)依0.5的概率進行水平翻轉,
3)最后將PIL圖像變?yōu)門ensor數(shù)據
'''
transforms.Compose([
transforms.Resize(32),
transforms.RandomHorizontalFlip(0.5),
transforms.ToTensor()
])

更多內容,敬請關注頂部圖書!

撰稿人:楊健亭,責任編輯: 李馨馨,審核人:曹新宇

 

免費贈書 活動規(guī)則

本文下方評論留言,分享您對此書籍的需求或看法/心得(不少于20字),我們將挑選最有價值10位朋友留言,贈送圖書1本。

贈送數(shù)量:10本

截止時間:2024年6月26日16點

郵寄時間:2024年7月05日前

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據手冊 ECAD模型 風險等級 參考價格 更多信息
MK60DN512VMC10 1 Freescale Semiconductor Kinetis K 32-bit MCU, ARM Cortex-M4 core, 512KB Flash, 100MHz, Ethernet, MAPBGA 121
$10.69 查看
ATMEGA128A-MUR 1 Microchip Technology Inc IC MCU 8BIT 128KB FLASH 64QFN
$7.34 查看
STM32F103CBT6 1 STMicroelectronics Mainstream Performance line, Arm Cortex-M3 MCU with 128 Kbytes of Flash memory, 72 MHz CPU, motor control, USB and CAN

ECAD模型

下載ECAD模型
$11.49 查看

相關推薦

電子產業(yè)圖譜

“工控有得聊”是機械工業(yè)出版社“機工工控”“機工通信”品牌旗下專業(yè)資訊和服務平臺,致力于幫助讀者在電氣、通信、自動化領域里,緊跟前沿資訊,掌握核心技術,快速提升專業(yè)素養(yǎng)。工業(yè)知識服務平臺,分享熱點資訊、精選深度技術文章、發(fā)布最新書訊。

微信公眾號