PyTorch笔记 - Convolution卷积运算的原理

Posted SpikeKing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorch笔记 - Convolution卷积运算的原理相关的知识,希望对你有一定的参考价值。

Convolution:

  • 元素:input size、kernel size、stride、padding、group、dilation(膨胀)

  • 计算方法:F.conv2d、input展开+矩阵相乘、kernel展开+矩阵相乘

  • 用途:局部建模、下采样

  • 卷积与互相关

Transpose Convolution:

  • 计算方法:F.conv_transpose2d、kernel转置+矩阵相乘
  • 用途:上采样

PyTorch Conv2D:

Conv2D的参数:

  • in_channels(输入通道), out_channels(输出通道), kernel_size(卷积核)
  • stride=1(步长), padding=0(填充), dilation=1(膨胀)

卷积和信号互相关类似,对于一张图像,卷积核沿着图像的不同区域,滑动相乘

Input Feature Map,特征图,4x4

Kernel,卷积核,3x3

stride=1,padding=0

Z字型移动,从左到右,从上到下

bias是标量,卷积之后的再加上标量

二维卷积源码:

import torch
import torch.nn as nn
import torch.nn.functional as F

in_channels = 1
out_channels = 1
kernel_size = 3  # 可以是标量,也可以是元组
batch_size = 1  
bias = False
input_size = (batch_size, in_channels, 4, 4)  # 卷积的输入是4维,需要batch_size

# 初始化卷积
conv_layer = torch.nn.Conv2d(in_channels, out_channels, kernel_size, bias=bias)
# 卷积输入
input_feature_map = torch.randn(input_size)
# 卷积操作
output_feature_map = conv_layer(input_feature_map)
print(f'[Info] input_feature_map: \\ninput_feature_map') # 1x1x4x4
print(f'[Info] conv_layer.weight(kernel): \\nconv_layer.weight') # 1x1x3x3
print(f'[Info] output_feature_map: \\noutput_feature_map')  # 1x1x2x2
# 输出公式: O=(I-K+2P)/S+1

output_feature_map_ = F.conv2d(input_feature_map, conv_layer.weight)
# F.conv2d和conv_layer的区别,在于传入kernel
print(f'[Info] output_feature_map_: \\noutput_feature_map_')  # 1x1x2x2

以上是关于PyTorch笔记 - Convolution卷积运算的原理的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch笔记 - Convolution卷积运算的原理

PyTorch笔记 - Convolution卷积运算的原理

PyTorch笔记 - Convolution卷积运算的原理

PyTorch笔记 - Convolution卷积运算的原理

PyTorch笔记 - Convolution卷积运算的原理

PyTorch笔记 - Convolution卷积运算的原理