模型搭建和引數優化

2021-10-05 06:51:36 字數 2953 閱讀 8690

#torchvision包的主要功能是實現資料的處理、匯入和預覽等,

# 所以如果需要對計算機視覺的相關問題進行處理,

# 就可以借用在torchvision包中提供的大量的類來完成相應的工作

import torch

# torchvision包的主要功能是實現資料的處理,匯入和預覽等

import torchvision

from torchvision import datasets

from torchvision import transforms

from torch.autograd import variable

from collections import ordereddict #orderdict有序字典 模型中使用

#如果獲取的資料是格式或者大小不一的,則還需要進行歸一化和大小縮放等操作

#transforms中提供了豐富的類對載入的資料進行變換,其中有很大一部分可以用於實現資料增強(data argumentation)

#compose類看作是一種容器,它能夠同時對多種資料變換進行組合

#傳入的引數是乙個列表,列表中的元素就是對載入的資料進行的各種變換操作。

transform = transforms.compose([transforms.totensor(),#型別的轉換變化

transforms.normalize(mean=[0.5,0.5,0.5],#資料標準化變換

#標準差變換法方法需要使用原始資料的均值(mean)和標準差(standard deviation)來進行資料的標準化,

# 在經過標準化變換之後,資料全部符合均值為0,標準差為1的標準正態分佈,

std=[0.5,0.5,0.5])])

#transforms中常用的資料變換操作

#1 resize

#用於對載入的資料按我們需求的大小進行縮放,引數可以是乙個整型資料,也可以是乙個類似於(h ,w )的序列

#2 scale

#用於對載入的資料按我們需求的大小進行縮放

#3 centercrop

# 傳遞給這個類的引數可以是乙個整型資料,也可以是乙個類似於(h ,w )的序列。

#4 randomcrop

# 用於對載入的按我們需要的大小進行隨機裁剪。

# 傳遞給這個類的引數可以是乙個整型資料,也可以是乙個類似於(h ,w )的序列

#5 randomhorizontalflip

# 用於對載入的按隨機概率(預設值0.5)進行水平翻轉

#6 randomverticalflip

#用於對載入的按隨機概率(預設值0.5)進行垂直翻轉

#7 totensor

#對載入的資料進行型別轉換,將之前構成pil的資料轉換成tensor資料型別的變數

#8 topilimage

#將tensor變數的資料轉換成pil資料,以方便內容的顯示

#模型搭建和引數優化

# 在順利完成資料裝載後,我們可以開始編寫卷積神經網路模型的搭建和引數優化的**

#卷積層使用torch.nn.conv2d類來搭建

# 啟用層使用torch.nn.relu 類方法來搭建

# 池化層使用torch.nn.maxpool2d類方法來搭建

# 全連線層使用 torch.nn.linear 類方法來搭建

class model(torch.nn.module):

def __init__(self):

super(model, self).__init__()

self.conv1 = torch.nn.sequential(

#使用了兩個卷積層:乙個最大池化層和兩個全連線層

#conv2d 輸入引數有輸入通道數、輸出通道數、卷積核大小、卷積核移動步長和paddingde值。

#輸入通道數的資料型別是整型,用於確定輸入資料的層數;

#輸出通道數的資料型別也是整型,用於確定輸出資料的層數;

#卷積核大小的資料型別是整型,用於確定卷積核的大小;

#卷積核移動步長的資料型別是整型,用於確定卷積核每次滑動的步長;

#paddingde 的資料型別是整型,值為0時表示不進行邊界畫素的填充,

# paddingde 如果值大於0,那麼增加數字所對應的邊界畫素層數。

torch.nn.conv2d(1, 64, kernel_size=3, stride=1, padding=1),

torch.nn.relu(),

torch.nn.conv2d(64, 128, kernel_size=3, stride=1, padding=1),

torch.nn.relu(),

#最大池化層,主要的輸入引數是池化視窗大小、池化視窗移動步長和padding的值。

torch.nn.maxpool2d(stride=2, kernel_size=2))

self.dense = torch.nn.sequential(

torch.nn.linear(14 * 14 * 128, 1024),

torch.nn.relu(),

#dropout類用於防止卷積神經網路在訓練的過程中發生過擬合

#其工作原理簡單來說就是在模型訓練的過程中,以一定的隨機概率將卷積神經網路模型的部分引數歸零,

# 以達到減少相鄰兩層神經連線的目的。

torch.nn.dropout(p=0.5),

torch.nn.linear(1024, 10)

)def forward(self, x):

x = self.conv1(x)

#引數實現扁平化

#如果不進行扁平化,則全連線層的實際輸出的引數維度和其定義輸入的維度將不匹配,程式將會報錯

x = x.view(-1, 14 * 14 * 128)

#通過self.dense定義的全連線層進行最後的分類。

x = self.dense(x)

return x

gitlab ci搭建和使用

關於選擇ce ee版本,請看 這裡選擇ee版本,如果方便日後加入ee版的功能,如果不購買license,功能就和ce版本差不多 first install sudo apt get update sudo apt get install y curl openssh server ca certif...

NFS搭建和部署

安裝部署 兩個伺服器乙個客戶端,乙個服務端 共享過去就覆蓋了以前的東西 安裝nfs utils,rpcbind,提供nfs共享的服務為nfs,完成安裝以後建議調整兩個服務的自啟動狀態,以便每次開機後自動啟動。手動載入nfs共享服務時,應該先啟動rpcbind,然後在啟動nfs。因為nfs要向rpc註...

SVNserver搭建和使用

svnserver搭建和使用 svnserverclient以及環境的搭建和使用 1.為什麼要用visualsvn server,而不用subversion?回答 由於假設直接使用subversion,那麼在windows 系統上,要想讓它隨系統啟動。就要封裝svn server為windws se...