Pytorch 框架
生活随笔
收集整理的這篇文章主要介紹了
Pytorch 框架
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一章? 數據加載
Dataset:提供一種方式去獲取數據及其標簽,并告訴我們有多少數據
Dataloader:為后面的網絡提供不同的數據形式
class MyData(Dataset): #創建一個MyData類,去繼承Datasetdef __init__(self,root_dir,label_dir): #創建全局變量,比如數據的路徑self.root_dir = root_dirself.label_dir = label_dir #self.設置全局變量self.path = os.path.join(self.root_dir,self.label_dir) #得到的是拼接的路徑self.img_path = os.listdir(self.path) #獲得path路徑下的所有文件(名字),是一個數組def __getiem__(self,index): #獲得圖片img_name = self.img_path[index] #獲得數組中的一個(文件名),不是路徑img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)#再拼接上文件名label = self.label_dirreturn img,labeldef __len__(self):return len(self.img_path) #返回一個長度#使用 root_dir = "database/train" data_label_dir = "data" data_dataset = MyDate(root_dir,data_label_dir) img,label = data_dataset[0] #第一張數據 img.show() #放出來第二章? tensorboard的使用?
主要用于看loss的變化
writer = SummaryWriter("logs") #把文件存儲在logs文件夾下#有三種主要的使用 writer.add_image() #用來把圖片顯示在ten里 writer.add_scalar() #顯示函數 writer.close()#在終端輸入命令,復制地址可打開。 #tensorboard --logdir=logs 其中logdir=事件文件所在文件夾名 #tensorboard --logdir=logs --port=6007 指定端口其中add_image()讀取數據的類型必須是 torch.Tensor,? numpy.array,? 或者是string/blobname類型,故 要進行數據類型轉換。
opencv-python是最常用來打開numpy類型的包
import numpy as np from PIL import Imageimage_path = '地址' img_PIL = Image.open(image_path) img_array = np.array(img_PIL) #先獲得PIL數據類型 print(type(img_array))第三章? ?transforms
用來對圖像進行變換,也就是輸入一個特定格式的圖片,經過transforms的函數后輸出我們想要的圖片結果
totensor數據類型:
img_path = '路徑' img = Image.open(img_path) print(img) #PIL類型的圖片tensor_trans = transforms.ToTensor() tensor_img = tensor_trans(img) #將PIL轉換為tensor數據類型Resize改變尺寸:
t_resize = transforms.Resize((512,512)) img_size = t_resize(img)第四章? 數據集的加載
轉換為tensor數據類型
import torchvisiondataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor() ])五? ?神經網絡的搭建?
import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module): #相當于nn.Module是一個網絡框架,我們對其一部分進行更改def __init__(self):super().__init__()self.conv1 = nn.Conv2d(1, 20, 5)self.conv2 = nn.Conv2d(20, 20, 5)def forward(self, x): #神經網絡經過forward得到一個輸出(前向傳播)x = F.relu(self.conv1(x)) # x經過一次卷積conv1,再經過一次非線性relureturn F.relu(self.conv2(x)) #得到的x再經過一次conv2再經過一次relu卷積:用卷積核在輸入圖像上對應相乘再相加。
import torch input = torch.tensor([[1,2,0,3,1], #[[表示是二維矩陣 #輸入圖像[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1]],dtype=torch.float32)#把lang型的1變成浮點型的1.0kernel = torch.tensor([[1,2,1], #卷積核[0,1,0],[2,1,0]])print(input.shape) # torch.Size([5,5]) input = torch.reshape(input,(1,1,5,5)) # 1-bachsize為1;1- 平面所以通道為1;(5,5)H,W kernel = torch.reshape(kernel,(1,1,3,3))#卷積 import torch.nn.functional as Foutput = F.conv2d(input,kernel,stride = 1) #stride = 1 走一步 padding輸入圖片填充 print(output) #結果就是對應相乘相加得到的矩陣?conv2d的輸入要求:input(minibatch,in_channels,H,W)四個參數,而圖片的shape只輸出(H,W)因此采用reshape函數
class Module(nn.Module)def __init__(self):super(Module,self).__init__() #初始化父類self.conv1 = Conv2d(in_channels=3,out_channels=6, #3-彩色,6-自己想要的層kernel_size=3,stride=1,padding=0) #3-卷積核3?3def forward(self,x):x = self.conv1(x)return x #想得到輸出x,所以返回xm = Module() print(m)六? ? ? 最大池化
? ? ? ?最大池化是指,對應相乘的最大值(不相加)。最大池化的目的是保留輸入的特征,同時又把數據量進行減小。
class Module(nn.Module)def __init__(self):super(Module,self).__init__() #初始化父類self.maxpool1 = MaxPool2d(kernel_size = 3,ceil_mode = True) #最大池化#ceil_mode=True 卷積核移動的時候邊邊也算def forward(self,input):output = self.maxpool1(input)return x module = Module() output = module(input) #把輸入的數組傳進去#如何把圖應用在網絡里 dataset = torchvision.datasets.CIFAR10('../data',train=False,download=True,transform=torchvision.transforms.ToTensor()) dataloader = DataLoader(dataset,batch_size = 64) #按每次64張輸入圖片for data in dataloader: imgs,targets = dataout = module(imgs)七? ? ? ?非線性激活?
非線性變換目的是為網絡引入一些非線性特征,因為非線性越多,網絡才能訓練出符合各種曲線特征的模型。如果大家都是線性的話,那模型的泛化能力將不夠好
nn.ReLU
class Module(nn.Module)def __init__(self):super(Module,self).__init__() #初始化父類self.relu1 = ReLU() #ReLU函數表示 小于0的為0,大于0的線性輸出def forward(self,input):output = self.relu1(input)return outputReLU對圖像的作用不是很明顯,Sigmoid函數明顯一些。
八? ? ? 正則化
可以加快神經網絡的訓練速度。用的少
總結
以上是生活随笔為你收集整理的Pytorch 框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【干货】营销拓客思维导图24式.pdf(
- 下一篇: optics hecht pdf 5_干