conv2d()、maxpool2d()、linear()、relu()等函数

基本函数

  • torch.nn.Conv2d()
  • torch.nn.MaxPool2d()
  • torch.nn.Linear()
  • torch.nn.ReLU()
  • torch.backends.cudnn.deterministic和torch.backends.cudnn.benchmark


torch.nn.Conv2d()

对由多个输入平面组成的输入信号应用 2D 卷积。

class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')¶

eg:
self.conv1 = torch.nn.Conv2d(3, 16, 5)
# 表明输入为3通道图像,输入为16通道图像,卷积层核为5*5大小

由于计算机视觉大红大紫,二维卷积用处是最广的。一维、二维和三维其实差不了多少,这里主要标重一下conv2dconv3d的区别:

  1. conv3d除了可以在图像平面上移动卷积之外,还可以在深度方向进行卷积;而conv2d并没有这个能力。
  2. conv3d中的深度和conv2d中的channel是不对应的,conv3d中没一个深度上都可以对应多个channel

torch.nn.MaxPool2d()

在由多个输入平面组成的输入信号上应用 2D 最大合并。

class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)¶

eg:
self.pool1 = nn.MaxPool2d(2, 2)
# 池化核尺寸2*2,步长为2,每隔两个值做一次

经过池化层后,数据仍然是一个三维的Tensor(),需要先经过展平再传到全连接层:

x = x.view(-1, 32*5*5)       # output(32*5*5)
# 将x展平,-1表示自动推理patch,32*5*5表示展平的向量大小

torch.nn.Linear()

对输入数据采用线性变换。

class torch.nn.Linear(in_features, out_features, bias=True)¶

eg:
self.fc1 = nn.Linear(32*5*5, 120)
# 输入样本大小为32*5*5,输出为120大小

torch.nn.ReLU()

class torch.nn.ReLU(inplace=False)

conv2d()、maxpool2d()、linear()、relu()等函数_第1张图片

torch.backends.cudnn.deterministic和torch.backends.cudnn.benchmark

# 为可重复性设置一个随机种子
myseed = 42069
# 确定性卷积,如果设置为True,每次返回的卷积算法将是确定的。如果配合上设置随机种子为固定值可以保证每次运行网络时相同输入对应输出是固定的。
torch.backends.cudnn.deterministic = True
# 如果为True,会对模型的卷积层进行预先的优化,也就是在所有卷积实现算法中选择最快的。适用于非动态变化的网络结构(网络的输入是固定的)
torch.backends.cudnn.benchmark = False
# deterministic = True和benchmark = false搭配使用最终结果是固定的。
np.random.seed(myseed)
torch.manual_seed(myseed)
if torch.cuda.is_available():
    # 设置用于在所有 GPU 上生成随机数的种子。如果 CUDA 不可用,调用此函数是安全的;在这种情况下,它会被默默地忽略。
    torch.cuda.manual_seed_all(myseed)

你可能感兴趣的:(卷积,神经网络,计算机视觉,卷积神经网络,深度学习)