VGG網絡結構 網絡
第一層: 3x3x3x64, 步長爲1, padding=1 ide
第二層: 3x3x64x64, 步長爲1, padding=1 spa
第三層: 3x3x64x128, 步長爲1, padding=1code
第四層: 3x3x128x128, 步長爲1, padding=1blog
第五層: 3x3x128x256, 步長爲1, padding=1it
第六層: 3x3x256x256, 步長爲1, padding=1class
第七層: 3x3x256x256, 步長爲1, padding=1import
第八層: 3x3x256x512, 步長爲1, padding=1 im
第九層: 3x3x512x512, 步長爲1, padding=1 img
第十層:3x3x512x512, 步長爲1, padding=1
第十一層: 3x3x512x512, 步長爲1, padding=1
第十二層: 3x3x512x512, 步長爲1, padding=1
第十三層:3x3x512x512, 步長爲1, padding=1
第十四層: 512*7*7, 4096的全鏈接操做
第十五層: 4096, 4096的全鏈接操做
第十六層: 4096, num_classes 的 全鏈接操做
import torch from torch import nn class VGG(nn.Module): def __init__(self, num_classes): super(VGG, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 64, kernel_size=3, padding=1), nn.ReLU(True), nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.ReLU(True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(64, 128, kernel_size=3, padding=1), nn.ReLU(True), nn.Conv2d(128, 128, kernel_size=3, padding=1), nn.ReLU(True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(128, 256, kernel_size=3, padding=1), nn.ReLU(True), nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(True), nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(256, 512, kernel_size=3, padding=1), nn.ReLU(True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(True), nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(True), nn.MaxPool2d(kernel_size=2, stride=2),) self.classifier = nn.Sequential( nn.Linear(512*7*7, 4096), nn.ReLU(True), nn.Dropout(), nn.Linear(4096, 4096), nn.ReLU(True), nn.Dropout(), nn.Linear(4096, num_classes) ) def forward(self, x): x = self.features(x) x = x.view(x.size(0), -1) x = self.classifier(x) return x