关键步骤:
(1) init() 构建子模块;
(2) forward() 拼接子模块;
主要包含: Parameter + Module + functional + init
张量, 表示可学习参数,如:weight、bias等;
所有网络层基类,管理网络属性;
每个module含8个字典OrderDict()管理他的属性;module可以包含多个多个子module;
每个module必须实现forward();
函数具体实现,如:卷积、池化、激活函数等;
参数初始化方法;
主要包含: nn.Sequential + nn.ModuleList + nn.ModuleDict
按顺序包装多个网络层;
特点:顺序性 + 自带forward()
像python list一样包装多个网络层;
特点:迭代性;
主要方法:append() 、extend()、 insert()
像python dict一样包装多个网络层;
特点:索引性;
主要方法:clear()、 items()、 keys()、 values()、 pop()
如:
nn.Conv2d(in_channels,
out_channels,
kernel_size,
stride=1,
padding=0,
dilation=1, # 空洞卷积大小
groups=1, # 分组卷积设置
bias=True,
padding_mode=‘zeros’) 对多个二维信号进行二维卷积
公式:
out_size = (in_size-kernel_size)/stride + 1 结果向上取整
(反卷积 Deconvolution + 部分跨越卷积 Fractionally=strided Convolution)
本质:对图像作上采样;
nn.ConvTranspose2d(in_channels,
out_channels,
kernel_size,
stride=1,
padding=0,
output_padding=0,
groups=1, # 分组卷积设置
bias=True,
dilation=1,
padding_mode=‘zeros’)
公式:
out_size = (in_size-1)*stride + kernel_size
nn.MaxPool2d(kernel_size,
stride=None,
padding=0,
dilation=1, # 池化核间隔大小
return_indices=False, # 记录池化像素索引
ceil_model=False # 尺寸向上取整
) 对二维图像进行最大值池化
nn.AvgPool2d(kernel_size,
stride=None,
padding=0,
ceil_model=False,
count_include_pad=True, # 填充值用于计算
divisor_overide=None # 除法因子
) 对二维图像进行平均值池化
nn.MaxUnpool2d(kernel_size,
stride=None,
padding=0) 对二维图像进行最大值池化上采样
nn.Linear(in_features,
out_features,
bias=True)
nn.Sigmoid
nn.tanh
nn.ReLU
nn.LeakyReLU
nn.PReLU
nn.RReLU
…