日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Pytorch 框架

發(fā)布時(shí)間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pytorch 框架 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第一章? 數(shù)據(jù)加載

Dataset:提供一種方式去獲取數(shù)據(jù)及其標(biāo)簽,并告訴我們有多少數(shù)據(jù)

Dataloader:為后面的網(wǎng)絡(luò)提供不同的數(shù)據(jù)形式

class MyData(Dataset): #創(chuàng)建一個(gè)MyData類,去繼承Datasetdef __init__(self,root_dir,label_dir): #創(chuàng)建全局變量,比如數(shù)據(jù)的路徑self.root_dir = root_dirself.label_dir = label_dir #self.設(shè)置全局變量self.path = os.path.join(self.root_dir,self.label_dir) #得到的是拼接的路徑self.img_path = os.listdir(self.path) #獲得path路徑下的所有文件(名字),是一個(gè)數(shù)組def __getiem__(self,index): #獲得圖片img_name = self.img_path[index] #獲得數(shù)組中的一個(gè)(文件名),不是路徑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) #返回一個(gè)長(zhǎng)度#使用 root_dir = "database/train" data_label_dir = "data" data_dataset = MyDate(root_dir,data_label_dir) img,label = data_dataset[0] #第一張數(shù)據(jù) img.show() #放出來(lái)

第二章? tensorboard的使用?

主要用于看loss的變化

writer = SummaryWriter("logs") #把文件存儲(chǔ)在logs文件夾下#有三種主要的使用 writer.add_image() #用來(lái)把圖片顯示在ten里 writer.add_scalar() #顯示函數(shù) writer.close()#在終端輸入命令,復(fù)制地址可打開。 #tensorboard --logdir=logs 其中l(wèi)ogdir=事件文件所在文件夾名 #tensorboard --logdir=logs --port=6007 指定端口

其中add_image()讀取數(shù)據(jù)的類型必須是 torch.Tensor,? numpy.array,? 或者是string/blobname類型,故 要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。

opencv-python是最常用來(lái)打開numpy類型的包

import numpy as np from PIL import Imageimage_path = '地址' img_PIL = Image.open(image_path) img_array = np.array(img_PIL) #先獲得PIL數(shù)據(jù)類型 print(type(img_array))

第三章? ?transforms

用來(lái)對(duì)圖像進(jìn)行變換,也就是輸入一個(gè)特定格式的圖片,經(jīng)過transforms的函數(shù)后輸出我們想要的圖片結(jié)果

totensor數(shù)據(jù)類型:

img_path = '路徑' img = Image.open(img_path) print(img) #PIL類型的圖片tensor_trans = transforms.ToTensor() tensor_img = tensor_trans(img) #將PIL轉(zhuǎn)換為tensor數(shù)據(jù)類型

Resize改變尺寸:

t_resize = transforms.Resize((512,512)) img_size = t_resize(img)

第四章? 數(shù)據(jù)集的加載

轉(zhuǎn)換為tensor數(shù)據(jù)類型

import torchvisiondataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor() ])

五? ?神經(jīng)網(wǎng)絡(luò)的搭建?

import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module): #相當(dāng)于nn.Module是一個(gè)網(wǎng)絡(luò)框架,我們對(duì)其一部分進(jìn)行更改def __init__(self):super().__init__()self.conv1 = nn.Conv2d(1, 20, 5)self.conv2 = nn.Conv2d(20, 20, 5)def forward(self, x): #神經(jīng)網(wǎng)絡(luò)經(jīng)過forward得到一個(gè)輸出(前向傳播)x = F.relu(self.conv1(x)) # x經(jīng)過一次卷積conv1,再經(jīng)過一次非線性relureturn F.relu(self.conv2(x)) #得到的x再經(jīng)過一次conv2再經(jīng)過一次relu

卷積:用卷積核在輸入圖像上對(duì)應(yīng)相乘再相加。

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變成浮點(diǎn)型的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) #結(jié)果就是對(duì)應(yīng)相乘相加得到的矩陣

?conv2d的輸入要求:input(minibatch,in_channels,H,W)四個(gè)參數(shù),而圖片的shape只輸出(H,W)因此采用reshape函數(shù)

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)

六? ? ? 最大池化

? ? ? ?最大池化是指,對(duì)應(yīng)相乘的最大值(不相加)。最大池化的目的是保留輸入的特征,同時(shí)又把數(shù)據(jù)量進(jìn)行減小。

class Module(nn.Module)def __init__(self):super(Module,self).__init__() #初始化父類self.maxpool1 = MaxPool2d(kernel_size = 3,ceil_mode = True) #最大池化#ceil_mode=True 卷積核移動(dòng)的時(shí)候邊邊也算def forward(self,input):output = self.maxpool1(input)return x module = Module() output = module(input) #把輸入的數(shù)組傳進(jìn)去#如何把圖應(yīng)用在網(wǎng)絡(luò)里 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)

七? ? ? ?非線性激活?

非線性變換目的是為網(wǎng)絡(luò)引入一些非線性特征,因?yàn)榉蔷€性越多,網(wǎng)絡(luò)才能訓(xùn)練出符合各種曲線特征的模型。如果大家都是線性的話,那模型的泛化能力將不夠好

nn.ReLU

class Module(nn.Module)def __init__(self):super(Module,self).__init__() #初始化父類self.relu1 = ReLU() #ReLU函數(shù)表示 小于0的為0,大于0的線性輸出def forward(self,input):output = self.relu1(input)return output

ReLU對(duì)圖像的作用不是很明顯,Sigmoid函數(shù)明顯一些。

八? ? ? 正則化

可以加快神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度。用的少

總結(jié)

以上是生活随笔為你收集整理的Pytorch 框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。