模型
训练模式
对于有些使用了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))