注冊網(wǎng)站不用手機(jī)短信驗(yàn)證的人工智能培訓(xùn)心得體會
本文將主要介紹torchvision.datasets的使用,并以CIFAR-10為例進(jìn)行介紹,對可視化工具tensorboard進(jìn)行介紹,包括安裝,使用,可視化過程等,最后介紹DataLoader的使用。希望對你有幫助
Pytorch公共數(shù)據(jù)集
torchvision.datasets.*
torchvision是pytorch的一個圖形庫,torchvision包由流行的數(shù)據(jù)集、模型架構(gòu)和計(jì)算機(jī)視覺的通用圖像轉(zhuǎn)換組成。例如tensorboard、transfroms
在這里將主要介紹torchvision.datasets.*
在datasets中包含了許多公共的應(yīng)用于圖像領(lǐng)域的數(shù)據(jù)集。包含:圖像分類、圖像檢測或分割、光流法、立體聲匹配等
在本章當(dāng)中,將以圖像分類領(lǐng)域的CIFAR10數(shù)據(jù)集作為torchvision.datasets的例子進(jìn)行介紹,因?yàn)樗容^小,下載比較快。
CIFAR-10是一個更接近普適物體的彩色圖像數(shù)據(jù)集。CIFAR-10 是由Hinton 的學(xué)生Alex Krizhevsky 和Ilya Sutskever 整理的一個用于識別普適物體的小型數(shù)據(jù)集。一共包含10 個類別的RGB 彩色圖片。
每個圖片的尺寸為32 × 32 ,每個類別有6000個圖像,數(shù)據(jù)集中一共有50000 張訓(xùn)練圖片和10000 張測試圖片。
下面是數(shù)據(jù)集中的類,以及每個類的10張隨機(jī)圖像
參數(shù)介紹
這些數(shù)據(jù)集的參數(shù)也是大同小異,由于CIFAR10數(shù)據(jù)集較小,下載就快。大家可以觸類旁通
- root :即指定數(shù)據(jù)集要下載在哪一個文件夾里面
- train(bool):如果True即為訓(xùn)練集,否則False則為測試集
- transform :進(jìn)行圖像變換的各種操作,如Resize、RandomCrop、Compose
- target_transform :對于標(biāo)簽進(jìn)行transform 操作
- download :是否下載數(shù)據(jù)集,建議設(shè)置為True即可
import torch
import torchvision
from torch.utils.data import Dataset
from torch.utils.tensorboard import SummaryWriter
#transform屬性
trans_tool = torchvision.transforms.Compose([torchvision.transforms.ToTensor() # 轉(zhuǎn)為Tensor類型# torchvision.transforms.Resize((5, 5)) # 進(jìn)行大小裁剪
])# 數(shù)據(jù)集劃分
tran_dataset = torchvision.datasets.CIFAR10(root="./dataset",train=True,transform=trans_tool,download=True)
test_dataset = torchvision.datasets.CIFAR10(root="./dataset",train=False,transform=trans_tool,download=True)
print(tran_dataset[0])
#Tensorboard
writer = SummaryWriter("logs")
for i in range(10):#顯示測試集前10的圖片img, label = tran_dataset[i]writer.add_image("CIFAR10",img,i)
writer.close()
Files already downloaded and verified
Files already downloaded and verified
(tensor([[[0.2314, 0.1686, 0.1961, ..., 0.6196, 0.5961, 0.5804],[0.0627, 0.0000, 0.0706, ..., 0.4824, 0.4667, 0.4784],[0.0980, 0.0627, 0.1922, ..., 0.4627, 0.4706, 0.4275],...,[0.8157, 0.7882, 0.7765, ..., 0.6275, 0.2196, 0.2078],[0.7059, 0.6784, 0.7294, ..., 0.7216, 0.3804, 0.3255],[0.6941, 0.6588, 0.7020, ..., 0.8471, 0.5922, 0.4824]],[[0.2431, 0.1804, 0.1882, ..., 0.5176, 0.4902, 0.4863],[0.0784, 0.0000, 0.0314, ..., 0.3451, 0.3255, 0.3412],[0.0941, 0.0275, 0.1059, ..., 0.3294, 0.3294, 0.2863],...,[0.6667, 0.6000, 0.6314, ..., 0.5216, 0.1216, 0.1333],[0.5451, 0.4824, 0.5647, ..., 0.5804, 0.2431, 0.2078],[0.5647, 0.5059, 0.5569, ..., 0.7216, 0.4627, 0.3608]],[[0.2471, 0.1765, 0.1686, ..., 0.4235, 0.4000, 0.4039],[0.0784, 0.0000, 0.0000, ..., 0.2157, 0.1961, 0.2235],[0.0824, 0.0000, 0.0314, ..., 0.1961, 0.1961, 0.1647],...,[0.3765, 0.1333, 0.1020, ..., 0.2745, 0.0275, 0.0784],[0.3765, 0.1647, 0.1176, ..., 0.3686, 0.1333, 0.1333],[0.4549, 0.3686, 0.3412, ..., 0.5490, 0.3294, 0.2824]]]), 6)
利用tensorboard查看,在控制臺輸入即可:
tensorboard --logdir 目錄
關(guān)于torchvision.datasets.CIFAR10介紹已經(jīng)講解完畢,后續(xù)內(nèi)容為擴(kuò)展內(nèi)容,包括:tensorboard、DataLoader的使用
tensorboard可視化工具
torch.utils.tensorboard
在Pytorch發(fā)布后,網(wǎng)絡(luò)及訓(xùn)練過程的可視化工具也相應(yīng)地被開發(fā)出來,方便用戶監(jiān)督所建立模型的結(jié)構(gòu)和訓(xùn)練過程
深度學(xué)習(xí)網(wǎng)絡(luò)通常具有很深的層次結(jié)構(gòu),而且層與層之間通常會有并聯(lián)、串聯(lián)等連接方式,利用有效的工具將建立的深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)有層次化的展示,這就需要使用相關(guān)的深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)可視化庫。
從Pytorch1.1之后,加入了tensorboard
一般安裝新版的pytorch會自動安裝,如果沒安裝,則在終端
命令行下使用下面命令即可安裝
pip install tensorboard
-
add_image()添加圖片
-
add_scalar()添加標(biāo)量數(shù)據(jù)
主要代碼如下
from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs") # 創(chuàng)建SummaryWriter,將運(yùn)行結(jié)果存logs文件夾中
for i in range(100):writer.add_scalar("y=2x",2*i,i) # 第一個參數(shù)相當(dāng)于標(biāo)題,第二個參數(shù)就相當(dāng)于縱坐標(biāo)的值,第三個參數(shù)就相當(dāng)于橫坐標(biāo)的值
writer.close()
可視化操作
在終端輸入:tensorboard --logdir 目錄
訪問:http://localhost:6006即可
writer.add_image的例子
from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriterimg_path = r"./pic.png"
# 打開一張圖片
img = Image.open(img_path)
# 使用transforms對圖像進(jìn)行變換
# 實(shí)例化totensor對象
to_tens = transforms.ToTensor()
# 將pic變成Tensor類型的圖片
tens_img = to_tens(img) # 自動調(diào)用call函數(shù)
#print(tens_img)# 使用上一篇文章中tensorboard進(jìn)行查看
writer = SummaryWriter("transforms_logs")
writer.add_image("test_transforms",tens_img) # 標(biāo)題,圖像類型
writer.close()
DataLoader的使用
from torch.utils.data import DataLoader
torch的DataLoader主要是用來裝載數(shù)據(jù),就是給定已知的數(shù)據(jù)集,把數(shù)據(jù)集裝載進(jìn)DataLoaer,然后送入深度學(xué)習(xí)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。
在torch.utils.data.DataLoader()參數(shù)中,只有dataset為必填參數(shù),其他的均有默認(rèn)值,下文介紹幾個重要的參數(shù)
-
dataset:表示要讀取的數(shù)據(jù)集
-
batch_size:表示每次從數(shù)據(jù)集中取多少個數(shù)據(jù)
-
shuffle:表示是否為亂序取出,True表示前后不一樣
-
num_workers :表示是否多進(jìn)程讀取數(shù)據(jù)(默認(rèn)為0);
-
drop_last : 表示當(dāng)樣本數(shù)不能被batchsize整除時(shí)(即總數(shù)據(jù)集/batch_size 不能除盡,有余數(shù)時(shí)),最后一批數(shù)據(jù)(余數(shù))是否舍棄(default:
False) -
pin_memory: 如果為True會將數(shù)據(jù)放置到GPU上去(默認(rèn)為false)
還是以上文的CIFAR10的測試集為例
from torch.utils.data import DataLoader
import torchvision
test_set = torchvision.datasets.CIFAR10("dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)
Files already downloaded and verified
# 創(chuàng)建DataLoader實(shí)例
test_loader = DataLoader(dataset=test_set, # 引入數(shù)據(jù)集batch_size=4, # 每次取4個數(shù)據(jù)shuffle=True, # 打亂順序num_workers=0, # 非多進(jìn)程drop_last=False # 最后數(shù)據(jù)(余數(shù))不舍棄
)
利用DataLoader的完整代碼如下
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter# 準(zhǔn)備測試集
test_set = torchvision.datasets.CIFAR10("dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)# 創(chuàng)建test_loader實(shí)例
test_loader = DataLoader(dataset=test_set, # 引入數(shù)據(jù)集batch_size=4, # 每次取4個數(shù)據(jù)shuffle=True, # 打亂順序num_workers=0, # 非多進(jìn)程drop_last=False # 最后數(shù)據(jù)(余數(shù))不舍棄
)img,index = test_set[0]
print(img.shape) # 查看圖片大小 torch.Size([3, 32, 32]) C h w,即三通道 32*32
print(index) # 查看圖片標(biāo)簽
# 遍歷test_loader
for data in test_loader:img,target = dataprint(img.shape) # 查看圖片信息torch.Size([4, 3, 32, 32])表示一次4張圖片,圖片為3通道RGB,大小為32*32print(target) # tensor([4, 9, 8, 8])表示4張圖片的target
# 在tensorboard 中顯示
writer = SummaryWriter("logs")
step = 0
for data in test_loader:img, target = datawriter.add_images("test_loader",img,step)step = step+1
writer.close()
tensorboard顯示如下