天天看點

用pytorch1.0快速搭建簡單的神經網絡

用pytorch1.0快速搭建簡單的神經網絡

用pytorch1.0搭建簡單的神經網絡

import torch
import torch.nn.functional as F  # 包含激勵函數

# 建立神經網絡
# 先定義所有的層屬性(__init__()), 然後再一層層搭建(forward(x))層于層的關系連結
class Net(torch.nn.Module):     # 繼承 torch 的 Module
    def __init__(self, n_feature, n_hidden, n_output):
        super(Net, self).__init__()     # 繼承 __init__ 功能
        # 定義每層用什麼樣的形式
        self.hidden = torch.nn.Linear(n_feature, n_hidden)   # hidden layer  # 隐藏層線性輸出
        self.predict = torch.nn.Linear(n_hidden, n_output)   # output layer  # 輸出層線性輸出 ==== 定義層數

    def forward(self, x):       # 這同時也是 Module 中的 forward 功能
        # 正向傳播輸入值, 神經網絡分析出輸出值
        x = F.relu(self.hidden(x))      # activation function for hidden layer  # 激勵函數(隐藏層的線性值)
        x = self.predict(x)             # linear output     # 輸出值
        return x

net1 = Net(1, 10, 1)

# easy and fast way to build your network
net2 = torch.nn.Sequential(
    torch.nn.Linear(1, 10),     # 第一層
    torch.nn.ReLU(),            # 激活層
    torch.nn.Linear(10, 1)      # 輸出層
)

print(net1)     # net1 architecture   ==  顯示神經網絡結構
"""
Net (
  (hidden): Linear (1 -> 10)
  (predict): Linear (10 -> 1)
)
"""
print(net2)     # net2 architecture
"""
Sequential (
  (0): Linear (1 -> 10)
  (1): ReLU ()
  (2): Linear (10 -> 1)
)
"""      
net2多顯示了一些内容, 這是為什麼呢? 原來它把激勵函數也一同納入進去了,但是net1中, 激勵函數實際上是在forward()功能中才被調用的。這也就說明了:      
net1相比net2的好處就是, 你可以根據你的個人需要更加個性化你自己的前向傳播過程, 比如(RNN).      

個人學習記錄

繼續閱讀