關於Pytorch的一些細節
阿新 • • 發佈:2019-01-10
模型
訓練模式
對於有些使用了Dropout
層的模型,在訓練階段有些神經元是要保持失活狀態的,以保證模型不會發生過擬合的行為。在實際應用時,這些失活的神經元則會全部啟用,全部參與到資料的處理中去:
將模型轉為訓練模式:
model.train()
將模型轉為評估模式:
model.eval()
卷積層與全連線層的連線
卷積層出來的都是特徵圖,屬於一堆堆的矩形,而它們下一級的全連線層則屬於一維的向量。如何將從卷積層出來的資料與全連線層的資料完美連線?在model
的 forward
函式中使用如下程式碼:
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))