網(wǎng)站集約化平臺(tái)青島seo排名公司
上一篇當(dāng)中,使用pytorch搭建了一個(gè)squeezenet,效果還行。但是偶然間發(fā)現(xiàn)了一個(gè)稍微改動(dòng)的版本,拿來測試一下發(fā)現(xiàn)效果會(huì)更好,大概網(wǎng)絡(luò)結(jié)構(gòu)還是沒有變,還是如下的第二個(gè)版本:
具體看網(wǎng)絡(luò)結(jié)構(gòu)代碼:
import torch
import torch.nn as nnclass Fire(nn.Module):def __init__(self, in_channel, out_channel, squzee_channel):super().__init__()self.squeeze = nn.Sequential(nn.Conv2d(in_channel, squzee_channel, 1),nn.BatchNorm2d(squzee_channel),nn.ReLU(inplace=True))self.expand_1x1 = nn.Sequential(nn.Conv2d(squzee_channel, int(out_channel / 2), 1),nn.BatchNorm2d(int(out_channel / 2)),nn.ReLU(inplace=True))self.expand_3x3 = nn.Sequential(nn.Conv2d(squzee_channel, int(out_channel / 2), 3, padding=1),nn.BatchNorm2d(int(out_channel / 2)),nn.ReLU(inplace=True))def forward(self, x):x = self.squeeze(x)x = torch.cat([self.expand_1x1(x),self.expand_3x3(x)], 1)return xclass SqueezeNet(nn.Module):"""mobile net with simple bypass"""def __init__(self, class_num=100):super().__init__()self.stem = nn.Sequential(nn.Conv2d(3, 96, 3, padding=1),nn.BatchNorm2d(96),nn.ReLU(inplace=True),nn.MaxPool2d(2, 2))self.fire2 = Fire(96, 128, 16)self.fire3 = Fire(128, 128, 16)self.fire4 = Fire(128, 256, 32)self.fire5 = Fire(256, 256, 32)self.fire6 = Fire(256, 384, 48)self.fire7 = Fire(384, 384, 48)self.fire8 = Fire(384, 512, 64)self.fire9 = Fire(512, 512, 64)self.conv10 = nn.Conv2d(512, class_num, 1)self.avg = nn.AdaptiveAvgPool2d(1)self.maxpool = nn.MaxPool2d(2, 2)def forward(self, x):x = self.stem(x)f2 = self.fire2(x)f3 = self.fire3(f2) + f2f4 = self.fire4(f3)f4 = self.maxpool(f4)f5 = self.fire5(f4) + f4f6 = self.fire6(f5)f7 = self.fire7(f6) + f6f8 = self.fire8(f7)f8 = self.maxpool(f8)f9 = self.fire9(f8)c10 = self.conv10(f9)x = self.avg(c10)# x = x.view(x.size(0), -1)x = torch.flatten(x, start_dim=1)return xdef squeezenet(class_num=100):return SqueezeNet(class_num=class_num)
最大的變化就是在卷積層和relu激活層之間加了個(gè)bn層,包括所有的fire結(jié)構(gòu)內(nèi)。其余就是卷積和池化的kernel_size或stride的微調(diào),包括最后去掉了dropout,以及最后部分的網(wǎng)絡(luò)結(jié)構(gòu)也稍作調(diào)整:
將這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)與上一個(gè)的網(wǎng)絡(luò)結(jié)構(gòu)訓(xùn)練同一訓(xùn)練集,得到的模型測試同一測試集,發(fā)現(xiàn)這個(gè)模型的準(zhǔn)確率會(huì)比上一個(gè)高幾個(gè)點(diǎn)。而且上一個(gè)模型訓(xùn)練容易不穩(wěn)定,訓(xùn)練到一半直接梯度爆炸了,需要不斷調(diào)參也比較麻煩,這個(gè)模型lr直接0.1或0.01都能訓(xùn)練很好,所以個(gè)人更推薦這個(gè)網(wǎng)絡(luò)模型。
下一篇編輯此網(wǎng)絡(luò)結(jié)構(gòu)的caffe版本。