Pytorch —— nn.Module类(nn.sequential)
? ? ? 對于前面的線性回歸模型、 Logistic回歸模型和神經網絡,我們在構建的時候定義了需要的參數。這對于比較小的模型是可行的,但是對于大的模型,比如100 層的神經網絡,這個時候再去手動定義參數就顯得非常麻煩,所以 PyTorch 提供了兩個模塊來幫助我們構建模型,一個是Sequential,一個是 Module。
nn.Module
? ? ? nn.Module類是所有網絡結構層次的父類。
? ? ? 當你要實現一個自己的層的時候,必須要繼承這個類。
? ? ? 而當我們使用一些現有的層,比如說線性層、卷積層的時候,它其實也是繼承自nn.Module,只不過這個類因為使用的非常廣泛 ,所以pytorch官方已經寫好了
? ? ? 當我們自己實現類的話,必須繼承自nn.Module,并且在init中完成初始化的步驟和forward中完成計算圖的前向構建的過程
?
every layer is nn.Module
pytorch實現了大部分的layer,這些layer都繼承于nn.Module
- nn.conv2d卷積層
- AvgPool,Maxpool,AdaptiveAvgPool
- TransposeConv逆卷積
- nn.Linear全連接層
- nn.BatchNorm1d(1d,2d,3d)
- nn.dropout
- nn.ReLU
- nn.Sequential
? ? ? 使用這些層非常方便,我們只需要調用一些初始化函數,然后再調用.call方法來調用其forward函數就可以使用它的一些功能
nn.sequential()用作容器Container
? ? ? Sequential 允許我們構建序列化的模塊。就把Sequential當作list來看
? ? ? nn.sequential(), 一個有序的容器,神經網絡模塊將按照在傳入構造器的順序依次被添加到計算圖中執行
? ? ? keras中也有類似的類,tensorflow中沒有
nn.sequential()本身也是一個nn.Module類
? ? ? Sequential 允許我們構建序列化的模塊,也就是說用了Sequential的好處是我們可以通過數字訪問第幾層,可以通過parameters、weights等參數顯示網絡的參數和權重
使用和不使用nn.Sequential()的對比
不使用
class Net(nn.Module):def __init__(self):super(Net, self).__init__()# xw+bself.fc1 = nn.Linear(28*28, 256)self.fc2 = nn.Linear(256, 64)self.fc3 = nn.Linear(64, 10)def forward(self, x):# x: [b, 1, 28, 28]# h1 = relu(xw1+b1)x = F.relu(self.fc1(x))# h2 = relu(h1w2+b2)x = F.relu(self.fc2(x))# h3 = h2w3+b3x = self.fc3(x)return x使用
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc = nn.Sequential(nn.Linear(28*28, 256)nn.Relu()nn.Linear(256, 64)nn.Relu()nn.Linear(64, 10))def forward(self, x):# x: [b, 1, 28, 28]# h1 = relu(xw1+b1)x = self.fc(x)return xSequential的三種寫法
net1 = nn.Sequential() net1.add_module('conv', nn.Conv2d(3, 3, 3)) net1.add_module('batchnorm', nn.BatchNorm2d(3)) net1.add_module('activation_layer', nn.ReLU()) net2 = nn.Sequential(nn.Conv2d(3, 3, 3),nn.BatchNorm2d(3),nn.ReLU()) from collections import OrderedDict net3= nn.Sequential(OrderedDict([('conv1', nn.Conv2d(3, 3, 3)),('bn1', nn.BatchNorm2d(3)),('relu1', nn.ReLU())]))3、parameter管理
使用nn.Module的話,它就會對你神經網絡的內部參數進行一個有效的管理
4、modules管理
直系子節點叫children
所有的節點加載一個叫modules
總結
以上是生活随笔為你收集整理的Pytorch —— nn.Module类(nn.sequential)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我国计算机技术的发展概括,计算机科学与技
- 下一篇: asp.net网站服务器,vs2010制