感覺就是將乙個常量賦值給了乙個張量。我們知道,pytorch一般情況下,是將網路中的引數儲存成ordereddict形式的。這裡額引數其實包括2種:一種是模型中各種 module含的引數,即nn.parameter,我們當然可以在網路中定義其他的nn.parameter引數。另外一種是buffer。前者每次optim.step會得到更新,而不會更新後者。
第乙個例子
class mymodel(nn.module):
def __init__(self, kernel_size=3):
super(depth_guided1, self).__init__()
self.kernel_size = kernel_size
self.back_end = torch.nn.sequential(
torch.nn.conv2d(3, 32, 3, padding=1),
torch.nn.relu(true),
torch.nn.conv2d(3, 64, 3, padding=1),
torch.nn.relu(true),
torch.nn.conv2d(64, 3, 3, padding=1),
torch.nn.relu(true),
)mybuffer = np.arange(1,10,1)
self.mybuffer_tmp = np.randn((len(mybuffer), 1, 1, 10), dtype='float32')
self.mybuffer_tmp = torch.from_numpy(self.mybuffer_tmp)
# register preset variables as buffer
# so that, in testing , we can use buffer variables.
self.register_buffer('mybuffer', self.mybuffer_tmp)
# learnable weights
self.conv_weights = nn.parameter(torch.floattensor(64, 10).normal_(mean=0, std=0.01))
# other code
def forward(self):
...# 這裡使用 self.mybuffer!
i. 定義parameter和buffer都只需要傳入 tensor即可。也不需要將其轉成gpu。這是因為,當網路進行 .cuda()時候,會自動將裡面的層的引數,buffer等轉換成相應的gpu上。
ii. self.register_buffer可以將tensor註冊成buffer,在forward中使用self.mybuffer, 而不是self.mybuffer_tmp.
iii. 網路儲存時也會將buffer存下,當網路load模型時,會將儲存的模型的buffer也進行賦值。
iv. buffer的更新在forward中,optim.step只能更新nn.parameter型別的引數。
pytorch設計模型
1.nn.modulelist使對於加入其中的子模組,不必在forward中依次呼叫 nn.sequentialt使對於加入其中的子模組在forward中可以通過迴圈實現呼叫 2.pytorch中nn.modulelist和nn.sequential的用法和區別 nn.sequential定義的網路...
Pytorch 四 訓練模型
1.在前三部分已經分別完成了資料的處理 神經網路的定義,還有優化器 損失函式的選擇,這次我們將開始學習如何訓練模型。2.模型的訓練其實也是套路,大致分為一下五個部分。1 載入trainloader中的資料,並將其轉換為variable 形式的資料,作為神經網路的輸入。2 每次迴圈開始之前,確保梯度的...
pytorch模型訓練步驟
講解 textcnn模型 1.載入conf檔案 x import module models.model name config x.config dataset,embedding 2.載入model,初始化conf裡面值 model x.model config to config.device...