### VGG-11 class MyNet(nn.Module): def __init__(self) -> None: super().__init__() # 继承用法
self.conv1 = nn.Conv2d( in_channels=1, out_channels=6, stride=1, kernel_size=5, padding=0
)
self.avg_pool_1 = nn.AvgPool2d( stride=2, kernel_size=2 )
self.conv2 = nn.Conv2d( in_channels=6, out_channels=16, kernel_size=5, stride=1, padding=0
)
self.avg_pool_2 = nn.AvgPool2d( kernel_size=2, stride=2 )
self.fc1 = nn.Linear(in_features=16*4*4,out_features=120) self.fc2 = nn.Linear(in_features=120,out_features=84) self.fc3 = nn.Linear(in_features=84,out_features=10) def forward(self,x):
x = self.conv1(x) x = self.avg_pool_1(x) x = self.conv2(x) x = self.avg_pool_2(x) # 此时格式为 [-,5,5,16] # 卷积后必须flatten 才能全连接,经过flatten x = torch.flatten(x,1) # [B,C,H,W] --> [-,C,H,W]
x = self.fc1(x) x = self.fc2(x) out = self.fc3(x) return out ### LeNet-5 class MyNet(nn.Module): def __init__(self) -> None: super().__init__() # 继承用法
self.conv1 = nn.Conv2d( in_channels=1, out_channels=6, stride=1, kernel_size=5, padding=0
)
self.avg_pool_1 = nn.AvgPool2d( stride=2, kernel_size=2 )
self.conv2 = nn.Conv2d( in_channels=6, out_channels=16, kernel_size=5, stride=1, padding=0
)
self.avg_pool_2 = nn.AvgPool2d( kernel_size=2, stride=2 )
self.fc1 = nn.Linear(in_features=16*4*4,out_features=120) self.fc2 = nn.Linear(in_features=120,out_features=84) self.fc3 = nn.Linear(in_features=84,out_features=10) def forward(self,x):
x = self.conv1(x) x = self.avg_pool_1(x) x = self.conv2(x) x = self.avg_pool_2(x) # 此时格式为 [-,5,5,16] # 卷积后必须flatten 才能全连接,经过flatten x = torch.flatten(x,1) # [B,C,H,W] --> [-,C,H,W]
x = self.fc1(x) x = self.fc2(x) out = self.fc3(x) return out |