关于pytorch中卷积使用的一些总结(包括nn.conv2d,nn.maxpool2d)

太久没写代码,感觉各种函数不熟悉。以此贴作为今天的记录。

首先是pytorch中的卷积 nn.Conv2d

我们可以查看官方文档。

nn.Conv2d 输入信号的形式为(N,Cin,H,W),N表示batch size,Cin​表示channel个数,H,W分别表示特征图的高和宽。

参数说明:

    stride(步长):控制cross-correlation的步长,可以设为1个int型数或者一个(int, int)型的tuple。

    padding(补0):控制zero-padding的数目。

    dilation(扩张):控制kernel点(卷积核点)的间距; 也被称为 "à trous"算法. 可以在此github地址查看:Dilated convolution animations

    groups(卷积核个数):这个比较好理解,通常来说,卷积个数唯一,但是对某些情况,可以设置范围在1 —— in_channels中数目的卷积核:

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


参数kernel_sizestride,paddingdilation也可以是一个int的数据,此时卷积height和width值相同;也可以是一个tuple数组,tuple的第一维度表示height的数值,tuple的第二维度表示width的数值。经常使用二维的kernel_size如(3,5),是tuple数组

参数

 

  • in_channels(int) – 输入信号的通道
  • out_channels(int) – 卷积产生的通道
  • kerner_size(int or tuple) - 卷积核的尺寸,在nlp中tuple用更多,(n,embed_size)
  • stride(int or tuple, optional) - 卷积步长
  • padding(int or tuple, optional) - 输入的每一条边补充0的层数
  • dilation(int or tuple, optional) – 卷积核元素之间的间距
  • groups(int, optional) – 从输入通道到输出通道的阻塞连接数
  • bias(bool, optional) - 如果bias=True,添加偏置

接下来是maxpool

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

如果padding不是0,会在输入的每一边添加相应数目0  比如padding=1,则在每一边分别补0 ,其实最后的结果补出来是bias

参数:

  • kernel_size(int or tuple) - max pooling的窗口大小,可以为tuple,在nlp中tuple用更多,(n,1)
  • stride(int or tuple, optional) - max pooling的窗口移动的步长。默认值是kernel_size
  • padding(int or tuple, optional) - 输入的每一条边补充0的层数
  • dilation(int or tuple, optional) – 一个控制窗口中元素步幅的参数
  • return_indices - 如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助
  • ceil_mode - 如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作

关于pytorch中卷积使用的一些总结(包括nn.conv2d,nn.maxpool2d)_第1张图片

 


还有一个突然忘了的把负数变成正数是什么函数。。

最后。。。是绝对值哇。。

在pytorch中变成绝对值有两种:

一种是变成32位浮点数  torch.FloatTensor(b)

另一种是torch.abs(b)


nn.embedding的输入必须是整形的 ,也就是LongTensor,所以需要b.long() 。这个问题在真正运行的时候不会犯,但是在测试时很容易忘记,可以注意一下。

RuntimeError: Expected tensor for argument #1 'indices' to have scalar type Long; but got CPUFloatTensor instead (while checking arguments for embedding)

上面的错误就很多时候是输入的数据类型错误,应该用 Longtensor

你可能感兴趣的:(pytorch)