可以看到,BASE模型精确率并不是那么的高。
问题C:Batch Normalization v.s BASE
在前三个block的卷积层之后加上Batch Normalization层,简单修改收集构造如下即可:
- class Net(nn.Module):
- def __init__(self):
- super(Net, self).__init__()
- self.conv1 = nn.Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1), padding=0)
- self.conv2 = nn.Conv2d(20, 50, kernel_size=(5, 5), stride=(1, 1), padding=0)
- self.fc1 = nn.Linear(4*4*50, 500)
- self.fc2 = nn.Linear(500, 10)
- self.bn1 = nn.BatchNorm2d(20)
- self.bn2 = nn.BatchNorm2d(50)
- self.bn3 = nn.BatchNorm1d(500)
- def forward(self, x):
- x = self.conv1(x)
- x = F.max_pool2d(self.bn1(x), 2)
- x = self.conv2(x)
- x = F.max_pool2d(self.bn2(x), 2)
- x = x.view(-1, 4*4*50)
- x = self.fc1(x)
- x = F.relu(self.bn3(x))
- x = self.fc2(x)
- return F.log_softmax(x)
同样的参数run一下,得出加了BN的结不雅为:
- Test set: Average loss: 0.0009, Accuracy: 9817/10000 (98.2%)
由此可见,有明显的效不雅晋升。
关于Batch Normalization的更多材料拜见[2],[5]。
问题D: Dropout Layer
在最后一层即 fc2 层后加一个 Dropout(p=0.5) 后,在BASE和BN上的结不雅分别为:
同样经由过程脚本运行,增长参数
- BASE:Test set: Average loss: 0.0011, Accuracy: 9769/10000 (97.7%)
- BN: Test set: Average loss: 0.0014, Accuracy: 9789/10000 (97.9%)
不雅察得知,dropout可以或许对BASE模型起到必定晋升感化,然则对BN模型却效不雅不明显反而降低了。
原因可能在于,BN模型中本身即包含了正则化的效不雅,再加一层Dropout显得没有须要反而可能影响结不雅。
问题E:SK model
SK model: Stacking two 3x3 conv. layers to WordStr 5x5 conv. layer
推荐阅读
据媒体报道,为改进 Go 说话的开辟对象,Go 可能会获得本身的说话办事器,类似于 Microsoft 和 Red Hat 的说话办事器协定。消息是大年夜 Go 说话开辟者的评论辩论组中流出,所以这不是最>>>详细阅读
本文标题:利用Pytorch进行CNN详细剖析
地址:http://www.17bianji.com/lsqh/36741.html
1/2 1