1. 程式人生 > 其它 >torch教程——搭建第一個神經網路

torch教程——搭建第一個神經網路

技術標籤:pythonpython深度學習神經網路卷積神經網路torch

Pytorch是一個機遇Torch的python第三方庫,是當前最流行的機器學習庫之一。本文講講述如何搭建一個簡易的神經網路。

  1. 將自定義神經網路封裝在一個類(Net類)中,此類需要繼承nn.Module。
  2. Net類需要重寫父類的兩個函式,分別是建構函式和前向傳播。
  3. 建構函式:在這裡定義前向傳播函式中需要用到的層,如卷積層,全連線層。這裡定義的層通常是比較複雜,需要引數的。
  4. 前向傳播:定義了神經網路從輸入,到隱層再到輸出的運算過程。這裡包含簡單的前向傳播函式,如有啟用函式(如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())

在這裡插入圖片描述