1. 程式人生 > >關於Pytorch的一些細節

關於Pytorch的一些細節

模型

訓練模式

對於有些使用了Dropout 層的模型,在訓練階段有些神經元是要保持失活狀態的,以保證模型不會發生過擬合的行為。在實際應用時,這些失活的神經元則會全部啟用,全部參與到資料的處理中去:

將模型轉為訓練模式:

model.train()

將模型轉為評估模式:

model.eval()

卷積層與全連線層的連線

卷積層出來的都是特徵圖,屬於一堆堆的矩形,而它們下一級的全連線層則屬於一維的向量。如何將從卷積層出來的資料與全連線層的資料完美連線?在modelforward 函式中使用如下程式碼:

class Net(nn.Module):
    def
__init__(self):
super(DQN, self).__init__() self.conv1 = nn.Conv2d(3, 16, kernel_size=5, stride=2) self.bn1 = nn.BatchNorm2d(16) self.conv2 = nn.Conv2d(16, 32, kernel_size=5, stride=2) self.bn2 = nn.BatchNorm2d(32) self.fc1 = nn.Linear(3808,448) self.dropout = nn.Dropout() self.head = nn.Linear(448
, 2) def forward(self, x): x = F.relu(self.bn1(self.conv1(x))) x = F.relu(self.bn2(self.conv2(x))) x = x.view(-1, 3808) # it's very important,without it, we wouldn't konw how to calculate it x = self.fc1(x) return self.head(x.view(x.size(0), -1))