torch教程——搭建第一個神經網路
阿新 • • 發佈:2021-01-11
技術標籤:pythonpython深度學習神經網路卷積神經網路torch
Pytorch是一個機遇Torch的python第三方庫,是當前最流行的機器學習庫之一。本文講講述如何搭建一個簡易的神經網路。
- 將自定義神經網路封裝在一個類(Net類)中,此類需要繼承nn.Module。
- Net類需要重寫父類的兩個函式,分別是建構函式和前向傳播。
- 建構函式:在這裡定義前向傳播函式中需要用到的層,如卷積層,全連線層。這裡定義的層通常是比較複雜,需要引數的。
- 前向傳播:定義了神經網路從輸入,到隱層再到輸出的運算過程。這裡包含簡單的前向傳播函式,如有啟用函式(如Sigmoid,Relu等),也包含建構函式中定義的層。
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import torch.utils.data as Data
class Net(nn.Module):
#建構函式
def __init__(self):
super(Net, self).__init__()
#卷積層三個引數:in_channel, out_channels, 5*5 kernal
self.con1 = nn.Conv2d(3, 116, 5)
self.con2 = nn.Conv2d(116, 100, 5)
#全連線層兩個引數:in_channels, out_channels
self.fc1 = nn.Linear(100 * 5 * 5, 500)
self.fc2 = nn.Linear(500, 84)
self.fc3 = nn.Linear(84, 10)
#前向傳播
def forward(self, input):
#卷積 --> 啟用函式(Relu) --> 池化
x = self.con1(input)
x = F.relu(x)
x = F.max_pool2d(x, (2, 2))
#重複上述過程
x = self.con2(x)
x = F.relu(x)
x = F.max_pool2d(x, (2, 2))
#展平
x = x.view(-1, self.num_flat_features(x))
#全連線層
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
#展平
def num_flat_features(self, x):
size = x.size()[1:]
num_features = 1
for i in size:
num_features = num_features * i
return num_features
實驗
這部分隨機初始化一個向量,並計算其輸出。實際上,神經網路就是一個複雜的函式族,其函式形式是確定的,具體的函式表示式取決於神經網路中的引數(權重和偏差)
這裡定義的神經網路接受n*3*32*32的輸入,輸出是1*10的張量。
net = Net()
input = torch.randn((1, 3, 32, 32))
out = net(input)
print(out.size())