3.0 神經網絡 - PyTorch學習筆記

神經網絡 (NEURAL NETWORK)

神經網絡可以通過 torch.nn 包來構建

上節課已經學習了 autogradnn 是在 autograd 的基礎上定義和區分模型。一個 nn.Module 包含了層,和一個 forward(input) 來返回 output

以典型 LetNet-5 網絡舉例:
在這裏插入圖片描述
這是一個簡單的前饋(feed-forward)網絡。具有輸入,將輸入饋送到一層接一層,最後輸出。

結構詳解參考:Fly~~~

一個典型的神經網絡訓練過程包含以下幾個方面:

  • 定義神經網絡的學習參數
  • 迭代輸入數據
  • 通過網絡處理輸入數據
  • 計算損失函數,也就是輸出距離整理的距離
  • 傳遞梯度反饋到網絡的參數
  • 更新網絡的參數,典型更新規則是 weight = weight - learning_rate * gradient

定義網絡 (Define the network)

讓我們定義這個網絡

import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 1 input image channel, 6 output channels, 3x3 square convolution
        # kernel
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16 * 6 * 6, 120)  # 6*6 from image dimension
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        # Max pooling over a (2, 2) window
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # If the size is a square you can only specify a single number
        x = F.max_pool2d(F.relu(self.conv2(x)), 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:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features


net = Net()
print(net)

輸出:

Net(
  (conv1): Conv2d(1, 6, kernel_size=(3, 3), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(3, 3), stride=(1, 1))
  (fc1): Linear(in_features=576, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章