1. torch.nn
from torch import nn
1.1 卷积
Conv2d
nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
# in_channels:输入通道
# out_channels:输出通道
# kernel_size:卷积核大小
# stride:步幅。默认为1
# padding:填充。默认为0
# dilation:卷积核各元素之间的距离。默认为1
# groups:从输入通道到输出通道的阻塞连接数。默认为1
# bias: 如果bias=True,添加偏置。默认为Ture
备注:
(1)除了默认值,其他值(前三个)必须输入。
(2)out_channels(输出通道个数)等于卷积核个数。
示例:
# 正方形的卷积核(3*3)
self.conv1 = nn.Conv2d(16, 33, 3, stride=2)
# 非正方形卷积核(3*5);不等跨距;带填充
self.conv1 = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
# 非正方形卷积核(3*5);不等跨距,有填充和膨胀
self.conv1 = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1))
1.2 池化
MaxPool2d
nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
# kernel_size:池化操作的滑动窗大小
# stride:滑动窗的步长,默认值是 kernel_size
# padding:要在输入信号的各维度各边上要补齐0的层数(填充)
# dilation:滑动窗中各元素之间的距离
# return_indices:如果此参数被设置为True,那么此池化层在返回输出信号的同时还会返回每个滑动窗的最大值位置信息
# ceil_mode:如果此参数被设置为True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作
示例:
m = nn.MaxPool2d(3, stride=2)
m = nn.MaxPool2d((3, 2), stride=(2, 1))
1.3 全连接层
Linear
nn.Linear(in_features, out_features, bias=True)
# in_features:每个输入样本的大小
# out_features:每个输出样本的大小
# bias:如果设置为false,则该层将不会学习相加偏移。默认值为true
示例:
input = torch.randn(128, 20)
self.fc1 = nn.Linear(20, 30)
output = self.fc1(input)
print(output.size())
1.4 函数(nn.functional)
import torch.nn.functional as F
1.4.1 激活函数(relu)
F.relu(input, inplace=False)
# inplace为True,将会改变输入的数据 ,否则不会改变原输入,只会产生新的输出
示例:
out = F.relu(self.conv1(x))
# 在卷积层中
out = F.relu(self.fc1(out))
# 在全连接层中
1.4.2 最大池化(max_pool2d)
F.max_pool2d(*args, **kwargs)
# *args表示输入数据
# **kwargs表示卷积核大小
示例:
out = F.max_pool2d(out, 2)
# (2,2)窗口上的最大池
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# 如果大小是正方形,则可以指定一个数字
x = F.max_pool2d(F.relu(self.conv2(x)), 2)