CIFAR-10 model structure
通过已知参数(高、宽、dilation=1、kernel_size)推断stride和padding的大小
网络
import torch
from torch import nnclass Tudui ( nn. Module) : def __init__ ( self) : super ( Tudui, self) . __init__( ) self. conv1 = nn. Conv2d( in_channels= 3 , out_channels= 32 , kernel_size= 5 , stride= 1 , padding= 2 ) self. maxpool1 = nn. MaxPool2d( kernel_size= 2 ) self. conv2 = nn. Conv2d( in_channels= 32 , out_channels= 32 , kernel_size= 5 , stride= 1 , padding= 2 ) self. maxpool2 = nn. MaxPool2d( 2 ) self. conv3 = nn. Conv2d( 32 , 64 , 5 , padding= 2 ) self. maxpool3 = nn. MaxPool2d( 2 ) self. flatten = nn. Flatten( ) self. linear1 = nn. Linear( 1024 , 64 ) self. linear2 = nn. Linear( 64 , 10 ) def forward ( self, x) : x = self. conv1( x) x = self. maxpool1( x) x = self. conv2( x) x = self. maxpool2( x) x = self. conv3( x) x = self. maxpool3( x) x = self. flatten( x) x = self. linear1( x) x = self. linear2( x) return x
tudui = Tudui( )
print ( tudui)
对网络进行检验
input = torch. ones( ( 64 , 3 , 32 , 32 ) )
output = tudui( input )
print ( output. shape)
线性层如果不知道输入特征是多少,注释掉线性层,查看输入特征(这里是1024)
使用nn.Sequential
import torch
from torch import nnclass Tudui ( nn. Module) : def __init__ ( self) : super ( Tudui, self) . __init__( ) self. model1 = nn. Sequential( nn. Conv2d( in_channels= 3 , out_channels= 32 , kernel_size= 5 , stride= 1 , padding= 2 ) , nn. MaxPool2d( kernel_size= 2 ) , nn. Conv2d( in_channels= 32 , out_channels= 32 , kernel_size= 5 , stride= 1 , padding= 2 ) , nn. MaxPool2d( 2 ) , nn. Conv2d( 32 , 64 , 5 , padding= 2 ) , nn. MaxPool2d( 2 ) , nn. Flatten( ) , nn. Linear( 1024 , 64 ) , nn. Linear( 64 , 10 ) ) def forward ( self, x) : x = self. model1( x) return x
tudui = Tudui( )
print ( tudui)
input = torch. ones( ( 64 , 3 , 32 , 32 ) )
output = tudui( input )
print ( output. shape)
可视化模型结构
writer = SummaryWriter( 'logs_seq' )
writer. add_graph( tudui, input )
writer. close( )