pytorch中的順序容器——torch.nn.Sequential

1.torch.nn.Sequential概要

pytorch官網對torch.nn.Sequential的描述如下。

使用方式:

# 寫法一
net = nn.Sequential(
    nn.Linear(num_inputs, 1)
    # 此處還可以傳入其他層
    )

# 寫法二
net = nn.Sequential()
net.add_module('linear', nn.Linear(num_inputs, 1))
# net.add_module ......

# 寫法三
from collections import OrderedDict
net = nn.Sequential(OrderedDict([
          ('linear', nn.Linear(num_inputs, 1))
          # ......
        ]))

方式一:
這是一個有順序的容器,將特定神經網絡模塊按照在傳入構造器的順序依次被添加到計算圖中執行。
方式二:
也可以將以特定神經網絡模塊爲元素的有序字典(OrderedDict)爲參數傳入。
方式三:
也可以利用add_module函數將特定的神經網絡模塊插入到計算圖中。add_module函數是神經網絡模塊的基礎類(torch.nn.Module)中的方法,如下描述所示用於將子模塊添加到現有模塊中。

2.Sequential源碼分析

先看一下初始化函數__init__,在初始化函數中,首先是if條件判斷,如果傳入的參數爲1個,並且類型爲OrderedDict,通過字典索引的方式利用add_module函數將子模塊添加到現有模塊中,否則,通過for循環遍歷參數,將所有的子模塊添加到現有中。

由於每一個神經網絡模塊都繼承於nn.Module,因此都會實現__call__forward函數,所以forward函數中通過for循環依次調用添加到現有模塊中的子模塊,最後輸出經過所有神經網絡層的結果。

參考文獻:
https://blog.csdn.net/dss_dssssd/article/details/82980222

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章