-
2021-08-04 02:39:34
Conv2D卷积、Conv2DTranspose 逆卷积 - 输出计算公式
Conv2D卷积: 用于缩小图像的尺寸、或增加复杂度
Conv2DTranspose 逆卷积: 用于扩大图像的尺寸- 输入:NxN
- 卷积核大小(kernel_size):FxF
- 步长(strides):S
- 边界扩充(padding的值):P
一、Conv2D卷积输出计算
-
Conv2D卷积(padding=valid):
输出尺寸=向下取整((N-F)/S)+1) -
Conv2D卷积(padding=same):
输出尺寸= 向上取整(N/S)
二、Conv2DTranspose 逆卷积输出计算
- Conv2DTranspose 逆卷积:
输出尺寸=(N−1)∗S−2P+F
更多相关内容 -
卷积-Conv2d
2021-01-20 20:03:34代码:基于pytorch的验证 #%% import torch from torch import nn #%% 产生数据 N = 2 Cin =2 ...arry = torch.arange(N*Cin*4*4,dtype=torch.float32).view([N,Cin...conv1 = nn.Conv2d(in_channels=Cin,out_channe...代码:基于pytorch的验证
#%% import torch from torch import nn #%% 产生数据 N = 2 Cin =2 Cout = 3 H = 4 W = 4 arry = torch.arange(N*Cin*4*4,dtype=torch.float32).view([N,Cin,H,W]) print('原始数据:',arry) #%% 2d卷积(pytorch) conv1 = nn.Conv2d(in_channels=Cin,out_channels=Cout,kernel_size=3,stride=1,padding=0) print('2d卷积(pytorch):',conv1(arry)) #%% 获取pytorch 2d卷积的变量 it = conv1.parameters() #迭代器 kernel = next(it) bias = next(it) print('卷积核:',kernel) print('卷积偏置:',bias) #%% 2d卷积(公式) arr = arry.detach().numpy() ker = kernel.detach().numpy() bia = bias.detach().numpy() import numpy as np rr = 0 #卷积用 cc = 0 #卷积用 con = np.zeros((N,Cout,2,2)) #卷积输出 #依次遍历Batch中每张图像 for n in range(N): for kernel in range(Cout): #第i个kernel for channel in range(Cin): #第i个kernel中第j个channel #图像卷积,Batch中每张图像,第i个kernel中第j个channel rr = 0;cc = 0;conTemp=np.zeros((2,2)) for r in [1,2]: #图像行 for c in [1,2]: #图像列 conTemp[rr,cc] = np.sum(arr[n,channel,(r-1):(r+2),(c-1):(c+2)]*ker[kernel,channel,:,:]) cc+=1 cc=0 rr+=1 con[n,kernel,:,:] += conTemp #多个channel相加 con[n,kernel,:,:] += bia[kernel] #加上bias print('2d卷积(公式)',con)
结果:pytorch函数和自己写的函数结果一致。证明了我上面的解释正确。
2d卷积(pytorch): tensor([[[[ -0.8406, -0.8379], [ -0.8299, -0.8272]], [[-16.8945, -17.8185], [-20.5904, -21.5144]], [[ 6.9472, 7.4892], [ 9.1152, 9.6572]]], [[[ -0.7549, -0.7523], [ -0.7442, -0.7415]], [[-46.4619, -47.3859], [-50.1579, -51.0818]], [[ 24.2914, 24.8334], [ 26.4594, 27.0014]]]], grad_fn=<ThnnConv2DBackward>) 2d卷积(公式) [[[[ -0.84061861 -0.83794105] [ -0.82990921 -0.82723093]] [[-16.89449914 -17.81848235] [-20.59042831 -21.51441355]] [[ 6.94720098 7.48920748] [ 9.11522838 9.65723416]]] [[[ -0.75493801 -0.75225866] [ -0.74422729 -0.7415489 ]] [[-46.46194191 -47.38591881] [-50.15787096 -51.08184786]] [[ 24.29141471 24.83342215] [ 26.45944354 27.00144812]]]]
tensorflow的二维卷积
import tensorflow as tf import numpy as np #%% 产生数据 N = 2 Cin =2 Cout = 3 H = 4 W = 4 arry = np.arange(N*Cin*H*W).reshape([N,H,W,Cin]) #%% input = tf.placeholder(dtype=tf.float32,shape=[N,H,W,Cin]) filter = tf.Variable(tf.random_normal([3,3,Cin,Cout])) conv2 = tf.nn.conv2d(input,filter,strides=[1,1,1,1],padding='VALID',use_cudnn_on_gpu=False) with tf.Session() as sess: tf.global_variables_initializer().run() print(sess.run(conv2,feed_dict={input:arry}))
-
nn.Conv2d卷积输入输出公式
2020-04-30 10:55:28nn.Conv2d中的padding操作,pytorch同tensorflow不同,padding没有“SAME”和“VALID”选项,根据熟人padding=(X,Y)来决定在哪里进行padding。**则第一个参数表示高度(上下)上面的padding,第2个参数表示宽度...
注意事项:nn.Conv2d中的padding操作,pytorch同tensorflow不同,padding没有“SAME”和“VALID”选项,根据熟人padding=(X,Y)来决定在哪里进行padding。**则第一个参数表示高度(上下)上面的padding,第2个参数表示宽度(左右)上面的。**如下图
-
深度学习卷积操作的维度计算(PyTorch/Tensorflow等框架中Conv1d、Conv2d和Conv3d介绍)
2020-12-20 14:15:06深度学习卷积操作的维度计算(PyTorch/Tensorflow等框架中Conv1d、Conv2d和Conv3d介绍)标签:#PyTorch##卷积神经网络##深度学习#时间:2019/05/31 20:27:07作者:小木#### 一、卷积操作的维度计算卷积操作的维度计算...深度学习卷积操作的维度计算(PyTorch/Tensorflow等框架中Conv1d、Conv2d和Conv3d介绍)
标签:#PyTorch##卷积神经网络##深度学习#
时间:2019/05/31 20:27:07
作者:小木
#### 一、卷积操作的维度计算
卷积操作的维度计算是定义神经网络结构的重要问题,在使用如PyTorch、Tensorflow等深度学习框架搭建神经网络的时候,对每一层输入的维度和输出的维度都必须计算准确,否则容易出错,这里将详细说明相关的维度计算。
首先,我们看一下卷积操作涉及的东西,一个卷积操作需要定义卷积核的大小、输入图像的padding长度以及卷积操作的步长。以一个二维输入为例,一个多卷积核操作的示意图如下:

这个例子的输入数据是一个三维数据,带有通道数,输入数据第三个维度是通道数,使用了两个卷积核(滤波器)扫描得到两个二维图像(一个卷积核对一个三维数据,即带多个通道的二维数据扫描可以得到一个图像,要求卷积核也是三维,且通道数和输入数据通道数一样),组成输出数据的两个通道。下面我们来描述具体计算。
假设输入数据大小是:
```math
w \times h
```
其中,w是宽度,h是高度。卷积核大小是:
```math
f \times f
```
padding的长度是p(padding),步长是s(stride):
那么经过卷积操作之后,输出的数据大小:
```math
\lfloor\frac{w + 2p - f}{s} +1 \rfloor \times \lfloor \frac{h +2p - f }{p} + 1\rfloor
```
如果输入的数据是三维数据,即:
```math
w \times h \times c
```
其中,w是宽度,h是高度,c是通道数(对于RGB图像输入来说,这个值一般是3,在文本处理中,通常是不同embedding模型的个数,如采用腾讯训练的、谷歌训练的等)。
这个时候的卷积核通常也是带通道的三维卷积核:
```math
f \times f \times c
```
注意,一般来说,卷积核的通道数c和输入数据的通道数是一致的。因此,这个时候卷积之后的输出依然是一个二维数据,其大小为:
```math
\lfloor \frac{w + 2p - f}{s} +1 \rfloor \times \lfloor \frac{h +2p - f}{s} + 1 \rfloor
```
这里的维度做了向下取整,防止结果不是整数的情况。假如希望输出的也是带通道的结果,那么这时候就要使用多个卷积核来操作了,最终输出的数据维度是:
```math
\lfloor \frac{w + 2p - f }{s} +1 \rfloor \times \lfloor \frac{h +2p - f}{p} + 1 \rfloor \times c'
```
其中$c\`$是卷积核的个数。
#### 二、深度学习框架中Conv1d、Conv2d
在像PyTorch、Tensorflow中,都有类似Conv1d、Conv2d和Conv3d的操作。这也都和卷积操作的维度有关,里面的参数都要定义好。例如如下的卷积操作:
```python
self.convs = nn.Sequential(
nn.Conv1d(in_channels=32,
out_channels=16,
kernel_size=5,
stride=1,
padding=0),
nn.BatchNorm1d(16),
nn.ReLU(inplace=True)
)
```
这里面的参数要定义好,否则容易出错。我们将分别介绍。
Conv1d是一维卷积操作,它要求输入的数据是三维的,即:
```math
\text{min batch size} \times \text{in channels number} \times L_{in}
```
最终输出的参数也是三维的:
```math
\text{min batch size} \times \text{out channels number} \times L_{out}
```
这里的out_channels定义了将由几个卷积核来扫描,kernel_size则定义了每一个卷积核大小,都可以自有定义。最终,输出的min_batch_size不变,out_channels数量根据定义的参数来,而输出的width计算如下:
```math
\lfloor \frac{L_{in} + 2p - f}{s} +1 \rfloor
```
类似的,如果使用Conv2D做卷积操作,那么输入就是四维的:
```math
N \times C_{in} \times H_{in} \times W_{in}
```
这里的$N$是min batch size,$C\_{in}$是输入数据的通道数,$H\_{in}$是输入数据的高度,$W\_{in}$是输入数据的宽度。其输出也是四维的,根据定义的卷积核大小和数量得到的输出维度如下:
```math
N \times C_{out} \times H_{out} \times W_{out}
```
其中,$C\_{out}$是根据卷积核的数量定义的输出数据的通道数,因为一个卷积核只能扫描得到一个二维图。其中$H\_{out}$和$W\_{out}$的计算如下:
```math
H_{out} = \lfloor \frac{H_{in} + 2p - f}{s} +1 \rfloor
```
```math
W_{out} = \lfloor \frac{W_{in} + 2p - f}{s} +1 \rfloor
```
-
Pytorch(笔记2)--Conv2d卷积运算
2019-05-17 21:18:06当我们安装好pytorch的依赖环境以后,我们就可以学习...接下来我们主要讲述nn.Conv2d 的卷积运算函数,nn.Conv2d的功能是:对由多个输入平面组成的输入信号进行二维卷积,以最简单的例子进行说明: layer = ... -
卷积函数tf.nn.conv2d
2020-12-20 14:15:07卷积函数tf.nn.conv2d1....最常用的方法是 tf.nn.conv2d方法,用于在计算图中加入2D 卷积算子。简单的用法如下:tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None,name=No... -
tf.nn.conv2d卷积计算函数及variable(全连接)和get_variable(权值共享)区别
2018-01-12 00:16:08tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) input: 指需要做卷积的输入图像(或者feature map),它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]... -
Pytorch: conv2d、空洞卷积、maxpool2d、 ConvTranspose2d的输出特征图计算方式
2021-04-14 10:42:021、conv2d nn.Conv2d(in_dim, out_dim, kernel_size=3, stride=1, padding=1) 输入为(h1,w1),输出为(h2,w2),h2...2、空洞卷积——conv2d nn.Conv2d(in_dim, out_dim, kernel_size=3, stride=1, padding=2, di -
Pytorch - Conv2d 卷积
2020-12-21 15:29:40关于 Pytorch 的CLASS torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)假设 Conv2d 的输入 input 尺寸为 $(N, C_{in}, H_{in}, W_{in})$,输出 ... -
nn.Conv2d——二维卷积运算解读
2021-09-19 15:43:32PyTorch学习笔记:nn.Conv2d——二维卷积运算解读nn.Conv2d——二维卷积运算代码案例一般用法输出卷积运算的参数填充方式零填充镜像填充复制填充循环填充官方文档 nn.Conv2d——二维卷积运算 torch.nn.Conv2d(in_... -
F.conv2d pytorch卷积计算
2020-03-17 15:55:27Pytorch里一般小写的都是函数式的接口,相应的大写...可以这样理解:nn.Conved是2D卷积层,而F.conv2d是2D卷积操作。 import torch from torch.nn import functional as F """手动定义卷积核(weight)和偏置""" w ... -
pytorch Conv2d 的宽高公式理解
2020-06-04 16:35:36pytorch 的二维卷积 torch.Conv2d,宽高计算公式如下所示(假设宽高相同,这里只讨论宽的公式,高的公式类似): Wout=Win+2×padding−dilation×(kernelsize−1)−1stride+1 W_{out} = \frac{W_{in} + 2 \times \... -
Pytorch 从0开始学(6)——Conv2d 详解
2021-01-26 20:37:24您是否在使用Conv2d时遇见问题了呢?您是否还在以Conv2d(128, 256, 3)的方式简单使用这个最具魅力的layer呢?想更了解Conv2d么?让我们一起来深入看看它的真容吧,让我们触到它更高端的用法。在第5节中,我们已经... -
Pytorch卷积层原理和示例 nn.Conv1d卷积 nn.Conv2d卷积
2020-02-11 16:20:50卷积层是用一个固定大小的矩形区去席卷原始数据,将原始数据分成一个个和卷积核大小相同的小块,然后将这些小块和卷积核相乘输出一个卷积值(注意这里是一个单独的值,不再是矩阵了)。 2.作用 特征提取 卷积的本质... -
tf.layers.conv2d_transpose 公式计算out_shape 计算输出的尺寸
2019-05-18 11:48:16tf.layers.conv2d_transpose如下图所示,蓝色为输入,绿色输出,灰色为卷积核,虚线网格为0,所以也可以看作是补0之后的正常卷积 tf.layers.conv2d_transpose(inputs=img, filters=16, kernel_size=(6, 6), ... -
带有dilation的conv卷积输出尺寸的计算公式
2019-08-22 17:36:47对于conv卷积输出尺寸的计算公式: -
TensorFlow之卷积函数(conv2d)
2020-12-20 14:15:09卷积函数是卷积神经...tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None):在给定4维的输入和过滤器的张量时,计算一个2维卷积。参数详解:input:输入的参数或者说是图像tenors... -
pytorch nn.conv2d参数个数计算
2021-03-12 18:15:04nn.conv2d(256, 256, 3, 3) 假设输入大小为[3, 128, 128],输出的大小则为128-3+1=126,这一层参数个数为256*3*3+256=2560. 假设输入尺寸为[C_in, H, W],则输出...nn.conv2d(C_in, C_out, K, K)参数个数的计算公式为C_ -
pytorch的nn.Conv2d()参数及尺寸计算详解(与Tensorflow.nn.Conv2d相比)
2020-11-23 21:12:22#卷积步长,就是卷积操作时每次移动的格子数 padding = 0, #原图周围需要填充的格子行(列)数,无填充的话卷积到边缘会直接忽略该边缘 dilation = 1, #空洞卷积的空洞指数,一般默认为1即可 groups = 1, #分 -
pytorch中nn.Conv2d卷积的padding的取值问题
2020-03-31 06:31:56明确卷积的计算公式:d = (d - kennel_size + 2 * padding) / stride + 1 保证输入输出的分辨率大小一致,padding的取值:如果kernal_size = 3, padding = 1。kernal_size = 7, padding = 3. 参考链接: ... -
卷积与转置卷积的关系,pytorch里的转置卷积(反卷积)ConvTranspose2d的计算过程图解及转置卷积计算公式理解
2021-08-02 15:28:23目录前言转置卷积图解卷积核大小对转置卷积的影响kernel_size=2,stride=1,padding=0,output_padding=0kernel_size=3,stride=1,padding=0,output_padding=0padding对转置卷积结果的影响kernel_size=3,stride=1... -
pytorch中的卷积操作torch.nn.Conv2d()
2021-11-10 11:28:13pytorch\mathrm{pytorch}pytorch中对由多个二维tensor\mathrm{tensor}tensor组成的数据进行二维卷积的时候用到的是torch.nn.Conv2d()\mathrm{torch.nn.Conv2d()}torch.nn.Conv2d(),具体的用法如下所示: ... -
【Tensorflow】Tensorflow中的卷积函数(conv2d、slim.conv2d、depthwise_conv2d、conv2d_transpose)
2019-07-27 14:19:21想必大家最早接触卷积的概念就是在初高中的数学当中,它是一个这样的公式; (g∗h)(x)=∫−∞∞g(τ)⋅h(x−τ)dτ(g\ast h)(x)=\int_{-\infty }^{\infty }g(\tau )\cdot h(x-\tau )d\tau (g∗h)(x)=∫−∞∞g(τ)... -
CNN卷积函数Conv2D()各参数的含义及用法
2020-07-23 00:54:52首先我们放出tf2.0关于tf.keras.layers.Conv2D()函数的官方文档,然后逐一对每个参数的含义和用法进行解释: tf.keras.layers.Conv2D( filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, ... -
CNN中的conv2d中的两种padding计算方法
2020-07-23 17:58:06目录 padding='VALID' padding='SAME' ref padding=‘VALID’ new_height=... FFF为卷积核的大小; SSS为步长,也就是stride; [_][\_][_]为向上取整的符号。 ref TensorFlow中CNN的两种padding方式“SAME”和“VALID” -
【TensorFlow基础】对于卷积神经网络中遇到的tf.nn.conv2d()函数理解和输出feature map的size求法
2021-11-12 16:52:22TensorFlow中函数conv2d主要实现了输入张量与设定卷积核的卷积操作,其函数形式如下: tf.nn.conv2d( input, filter, strides, padding, use_cudnn_on_gpu=True, data_format='NHWC', dilations=[1, 1, 1, 1]... -
【笔记】nn.Conv2d和nn.ConvTranspose2d:参数说明,卷积、反卷积后 图像的尺寸 计算公式
2021-08-23 17:44:45nn.Conv2d和nn.ConvTranspose2d参数说明及区别 1、nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True) in_channels:输入维度 out_channels:输出维度 ... -
【Tensorflow】tf.nn.depthwise_conv2d如何实现深度卷积?+深度可分离卷积详解
2021-04-27 15:44:02注意:depthwise_conv2d 与普通的卷积有些不同。普通的卷积对卷积核每一个out_channel 的两个通道分别和输入的两个通道做卷积相加,得到 feature map 的一个channel, # 而 depthwise_conv2d 卷积对每一个对应的 in_... -
torch.nn.Conv2d()函数详解
2019-02-21 09:52:02import torch x = torch.randn(2,1,7,3) conv = torch.nn.conv2d(1,8,(2,3)) res = conv(x) print(res.shape) # shape = (2, 8, 6, 1) 输入: x [ batch_size, channels, height_1, width_1 ] batch_size ... -
Tensorflow卷积神经网络之conv1d和conv2d的解读笔记
2020-09-02 16:35:03文中提到tensorflow卷积层的接口 conv1d和conv2d等;而且示例也没看懂,和预想的理论计算的结果不一致。接下来,分析tensorflow的conv1d和conv2d的源码。 2. conv1d 2.1 source code def conv1d(value, filters, ...