修改模型
This commit is contained in:
parent
6d4e86714e
commit
2909902595
1 changed files with 4 additions and 132 deletions
136
model.py
136
model.py
|
|
@ -1,7 +1,7 @@
|
||||||
"""
|
"""
|
||||||
这个文件是模型的定义文件,请不要擅自修改,如有疑问微信群里反馈
|
这个文件是模型的定义文件,请不要擅自修改,如有疑问微信群里反馈
|
||||||
单独运行本文件将会输出模型结构
|
单独运行本文件将会输出模型结构
|
||||||
目前的话是一个36层的模型,模型总量应该是在10M左右 如果到时候还是欠拟合的话再考虑去做更深的结构
|
目前的话是一个36层的模型,模型总量应该是在80M左右 如果到时候还是欠拟合的话再考虑去做更深的结构
|
||||||
author : yukun-hh
|
author : yukun-hh
|
||||||
date : 2026-4-10
|
date : 2026-4-10
|
||||||
|
|
||||||
|
|
@ -10,7 +10,7 @@ date : 2026-4-10
|
||||||
import torch
|
import torch
|
||||||
from torch import nn
|
from torch import nn
|
||||||
from torch.nn import functional as F
|
from torch.nn import functional as F
|
||||||
|
from torchsummary import summary
|
||||||
#残差块
|
#残差块
|
||||||
class Resblock(nn.Module):
|
class Resblock(nn.Module):
|
||||||
def __init__(self, input_channels,output_channels,use_1x1conv=False,strides=1):
|
def __init__(self, input_channels,output_channels,use_1x1conv=False,strides=1):
|
||||||
|
|
@ -83,140 +83,12 @@ class Net():
|
||||||
def get_network(self):
|
def get_network(self):
|
||||||
return self.net
|
return self.net
|
||||||
|
|
||||||
"""
|
|
||||||
Sequential(
|
|
||||||
(0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3))
|
|
||||||
(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(2): ReLU()
|
|
||||||
(3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
|
|
||||||
)
|
|
||||||
Sequential output shape: torch.Size([1, 64, 64, 64])
|
|
||||||
Sequential(
|
|
||||||
(0): Resblock(
|
|
||||||
(conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(1): Resblock(
|
|
||||||
(conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(2): Resblock(
|
|
||||||
(conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Sequential output shape: torch.Size([1, 64, 64, 64])
|
|
||||||
Sequential(
|
|
||||||
(0): Resblock(
|
|
||||||
(conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv3): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2))
|
|
||||||
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(1): Resblock(
|
|
||||||
(conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(2): Resblock(
|
|
||||||
(conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(3): Resblock(
|
|
||||||
(conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Sequential output shape: torch.Size([1, 128, 32, 32])
|
|
||||||
Sequential(
|
|
||||||
(0): Resblock(
|
|
||||||
(conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv3): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2))
|
|
||||||
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(1): Resblock(
|
|
||||||
(conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(2): Resblock(
|
|
||||||
(conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(3): Resblock(
|
|
||||||
(conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(4): Resblock(
|
|
||||||
(conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(5): Resblock(
|
|
||||||
(conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Sequential output shape: torch.Size([1, 256, 16, 16])
|
|
||||||
Sequential(
|
|
||||||
(0): Resblock(
|
|
||||||
(conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv3): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2))
|
|
||||||
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(1): Resblock(
|
|
||||||
(conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
(2): Resblock(
|
|
||||||
(conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
|
|
||||||
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Sequential output shape: torch.Size([1, 512, 8, 8])
|
|
||||||
AdaptiveAvgPool2d(output_size=(1, 1))
|
|
||||||
AdaptiveAvgPool2d output shape: torch.Size([1, 512, 1, 1])
|
|
||||||
Flatten(start_dim=1, end_dim=-1)
|
|
||||||
Flatten output shape: torch.Size([1, 512])
|
|
||||||
Linear(in_features=512, out_features=4, bias=True)
|
|
||||||
Linear output shape: torch.Size([1, 4])
|
|
||||||
"""
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
Net_new = Net()
|
Net_new = Net()
|
||||||
X = torch.rand(size=(1, 3, 256, 256))
|
X = torch.rand(size=(1, 3, 256, 256))
|
||||||
for layer in Net_new.get_network():
|
summary(Net_new.get_network(), input_size=(3, 256, 256))
|
||||||
print(layer)
|
|
||||||
X = layer(X)
|
|
||||||
print(layer.__class__.__name__, 'output shape:\t', X.shape)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue