nn.Sequential 是一個有序的容器,神經網絡模塊將按照在傳入構造器的順序依次被添加到計算圖中執行,同時以神經網絡模塊為
元素的有序字典也可以作為傳入參數。
# Example of using Sequential
model = nn.Sequential(
nn.Conv2d(1,20,5),
nn.ReLU(),
nn.Conv2d(20,64,5),
nn.ReLU()
)
# Example of using Sequential with OrderedDict
model = nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(1,20,5)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(20,64,5)),
('relu2', nn.ReLU())
]))
下面來看一下它的源碼。在初始化函數 __init__ 中,首先是 if 條件判斷,如果傳入的參數為 1 個,並且類型為 OrderedDict,通過
字典索引的方式將子模塊添加到 self._module 中,否則,通過 for 循環遍歷參數,將所有的子模塊添加到 self._module 中。
注意:Sequential 模塊的初始換函數沒有異常處理,所以在寫的時候要注意。

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

