简单说说pytorch深度学习のtorch.nn.conv2D 卷积

本文简单谈谈pytorch的二维卷积nn.conv2D,其主要作用为在由多个输入平面组成的输入信号上应用二维卷积。

目录

文章目录

前言

一、卷积过程

1.最简单的二维互相关

 2.以RGB为例的多通道卷积

二、conv2D的相关参数

1.conv2D的形式:

2.参数解析

三、示例代码


前言

本文简单谈谈pytorch的二维卷积nn.conv2D,其主要作用为在由多个输入平面组成的输入信号上应用二维卷积。


一、卷积过程

1.最简单的二维互相关

如图,如果我们的输入是1*5*5(1指通道数,可理解为一层;5*5为尺寸),使其与3*3的卷积核卷积,其过程为从Input中选取一个与卷积核同尺寸的矩阵,使其数乘(注意不是矩阵乘法)再求和,即得到左上角的输出,然后依次类推,获得输出。

简单说说pytorch深度学习のtorch.nn.conv2D 卷积_第1张图片

 2.以RGB为例的多通道卷积

 简单说说pytorch深度学习のtorch.nn.conv2D 卷积_第2张图片

 RGB图像里面,我们可以分为红,绿,蓝三个通道,每一个通道拥有其特定的卷积核,然后与其特有的卷积核相卷积,然后将三个通道求和得到最后的结果,如果输入有n个通道,则需要n个卷积核

总体上讲,我们将一个n*5*5的输入经过n*3*3的卷积核卷积成了1*3*3的输出,输出通道数为1;如果我们需要通道数为m的输出,那么就需要拿m个(n*3*3)的卷积核卷积,然后我们可以将输出的所有通道拼接起来,得到输出。

 简单说说pytorch深度学习のtorch.nn.conv2D 卷积_第3张图片

 注:1.卷积核的通道数与输入的通道数相同(in_channals)

        2.输出的通道数是卷积核的数量(out_channals)

二、conv2D的相关参数

1.conv2D的形式:

nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0,dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

2.参数解析

   in_channals:输入通道数

   out_channals:输出通道数

   kernel_size:卷积核尺寸

   stride:步长,在上面的例子里,是选取输入内3*3的矩阵与卷积核做数乘,然后向右或向下移动一位再进行卷积,默认stride为一,若为2,则移动两格

   padding: 在初始输入外面加0,padding为几则加几圈0,从而改变输出的尺寸,默认为0

  dilation:控制卷积核之间的距离

  groups:输入和输出之间的连接

  bias: 是否将学习到的bias增加到输出中,即是否保存学习

三、示例代码

import torch
import torch.nn as nn
import numpy as np

input = np.random.randint(1,10,(5,5))       #生成随机输入

random_kernel = np.random.randint(1,10,(3,3))      #生成随机卷积核

input = torch.Tensor(input).view(1,1,5,5)     #设置输入张量

conv_layer = nn.Conv2d(1,1,kernel_size = 3,bias = False)    #卷积

kernel = torch.Tensor(random_kernel).view(1,1,3,3)  #构造卷积核

conv_layer.weight.data = kernel.data 

output = conv_layer(input)

print(input)
print(random_kernel)
print(output)

 

你可能感兴趣的:(深度学习每天瞄一眼,python,pytorch)