本文主要介绍PyTorch中的nn.Conv1dnn.Conv2d方法,并给出相应代码示例,加深理解。

一维卷积nn.Conv1d

一般来说,一维卷积nn.Conv1d用于文本数据,只对宽度进行卷积,对高度不卷积。通常,输入大小为word_embedding_dim * max_length,其中,word_embedding_dim为词向量的维度,max_length为句子的最大长度。卷积核窗口在句子长度的方向上滑动,进行卷积操作。

定义

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

主要参数说明:

  • in_channels:在文本应用中,即为词向量的维度
  • out_channels:卷积产生的通道数,有多少个out_channels,就需要多少个一维卷积(也就是卷积核的数量)
  • kernel_size:卷积核的尺寸;卷积核的第二个维度由in_channels决定,所以实际上卷积核的大小为kernel_size * in_channels
  • padding:对输入的每一条边,补充0的层数

代码示例

输入:批大小为32,句子的最大长度为35,词向量维度为256
目标:句子分类,共2类

conv1 = nn.Conv1d(in_channels=256, out_channels=100, kernel_size=2)
input = torch.randn(32, 35, 256)
input = input.permute(0, 2, 1)
output = conv1(input)

假设window_size = [3, 4, 5, 6],即共有四个卷积核,基于上述代码,具体计算过程如下:

  1. 原始输入大小为(32, 35, 256),经过permute(0, 2, 1)操作后,输入的大小变为(32, 256, 35)
  2. 使用1个卷积核进行卷积,可得到1个大小为32 x 100 x 1的输出,共4个卷积核,故共有4个大小为32 x 100 x 1的输出;
  3. 将上一步得到的4个结果在dim = 1上进行拼接,输出大小为32 x 400 x 1
  4. view操作后,输出大小变为32 x 400
  5. 全连接,最终输出大小为32 x 2,即分别预测为2类的概率大小。

一维卷积过程图解

Yoon Kim在2014年发表的论文Convolutional Neural Networks for Sentence Classification中,给出了一个非常形象的图,诠释了文本卷积模型的框架,如下所示。

nn.Conv1d详细图解(使用多个卷积核)

二维卷积nn.Conv2d

一般来说,二维卷积nn.Conv2d用于图像数据,对宽度和高度都进行卷积。

定义

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

代码示例

假设现有大小为32 x 32的图片样本,输入样本的channels为1,该图片可能属于10个类中的某一类。CNN框架定义如下:

class CNN(nn.Module):def __init__(self):nn.Model.__init__(self)self.conv1 = nn.Conv2d(1, 6, 5)  # 输入通道数为1,输出通道数为6self.conv2 = nn.Conv2d(6, 16, 5)  # 输入通道数为6,输出通道数为16self.fc1 = nn.Linear(5 * 5 * 16, 120)self.fc2 = nn.Linear(120, 84)self.fc3 = nn.Linear(84, 10)def forward(self, x):# 输入x -> conv1 -> relu -> 2x2窗口的最大池化x = self.conv1(x)x = F.relu(x)x = F.max_pool2d(x, 2)# 输入x -> conv2 -> relu -> 2x2窗口的最大池化x = self.conv2(x)x = F.relu(x)x = F.max_pool2d(x, 2)# view函数将张量x变形成一维向量形式,总特征数不变,为全连接层做准备x = x.view(x.size()[0], -1)x = F.relu(self.fc1(x))x = F.relu(self.fc2(x))x = self.fc3(x)return x

网络整体结构:[conv + relu + pooling] * 2 + FC * 3
原始输入样本的大小:32 x 32 x 1

  1. 第一次卷积:使用6个大小为5 x 5的卷积核,故卷积核的规模为(5 x 5) x 6;卷积操作的stride参数默认值为1 x 1,32 - 5 + 1 = 28,并且使用ReLU对第一次卷积后的结果进行非线性处理,输出大小为28 x 28 x 6
  2. 第一次卷积后池化kernel_size2 x 2,输出大小变为14 x 14 x 6
  3. 第二次卷积:使用16个卷积核,故卷积核的规模为(5 x 5 x 6) x 16;使用ReLU对第二次卷积后的结果进行非线性处理,14 - 5 + 1 = 10,故输出大小为10 x 10 x 16
  4. 第二次卷积后池化kernel_size同样为2 x 2,输出大小变为5 x 5 x 16
  5. 第一次全连接:将上一步得到的结果铺平成一维向量形式,5 x 5 x 16 = 400,即输入大小为400 x 1,W大小为120 x 400,输出大小为120 x 1
  6. 第二次全连接,W大小为84 x 120,输入大小为120 x 1,输出大小为84 x 1
  7. 第三次全连接:W大小为10 x 84,输入大小为84 x 1,输出大小为10 x 1,即分别预测为10类的概率值。

nn.Conv2d详细图解

注意

  1. 在PyTorch中,池化操作默认的stride大小与卷积核的大小一致;
  2. 如果池化核的大小为一个方阵,则仅需要指明一个数,即kernel_size参数为常数n,表示池化核大小为n x n

PyTorch中的nn.Conv1d与nn.Conv2d相关推荐

  1. pytorch笔记(四)nn.Conv1d、nn.Conv2d、nn.Conv3d

    概念: nn.Conv1d:常用在文本 (B,C,L) (batch,channel,sequence_len) (批数量,通道数,句子长度) nn.Conv2d:常用在图像 (B,C,H,W) (b ...

  2. pytorch中的MSELoss函数

    基本概念 均方误差(mean square error, MSE),是反应估计量与被估计量之间差异程度的一种度量,设ttt是根据子样确定的总体参数θ\thetaθ的一个估计量,(θ−t)2(\thet ...

  3. Pytorch中nn.Conv2d的用法

    官网链接: nn.Conv2d     Applies a 2D convolution over an input signal composed of several input planes. ...

  4. Pytorch中nn.Conv2d数据计算模拟

    Pytorch中nn.Conv2d数据计算模拟 最近在研究dgcnn网络的源码,其网络架构部分使用的是nn.Conv2d模块.在Pytorch的官方文档中,nn.Conv2d的输入数据为(B, Cin ...

  5. 图解 Pytorch 中 nn.Conv2d 的 groups 参数

    文章目录 普通卷积复习 Groups是如何改变卷积方式的 实验验证 参考资料 普通卷积复习 首先我们先来简单复习一下普通的卷积行为. 从上图可以看到,输入特征图为3,经过4个filter卷积后生成了4 ...

  6. Pytorch中的Conv1d()和Conv2d()函数

    文章目录 一.Pytorch中的Conv1d()函数 二.Pytorch中的Conv2d()函数 三.Pytorch中的MaxPool1d()函数 四.pytorch中的MaxPool2d()函数 参 ...

  7. Pytorch之nn.Conv1d学习个人见解

    Pytorch之nn.Conv1d学习个人见解 一.官方文档(务必先耐心阅读) 官方文档:点击打开<CONV1D> 二.Conv1d个人见解 Conv1d类构成 class torch.n ...

  8. PyTorch学习笔记(1)nn.Sequential、nn.Conv2d、nn.BatchNorm2d、nn.ReLU和nn.MaxPool2d

    文章目录 一.nn.Sequential 二.nn.Conv2d 三.nn.BatchNorm2d 四.nn.ReLU 五.nn.MaxPool2d 一.nn.Sequential torch.nn. ...

  9. NLP中的卷积操作详解(torch.nn.Conv1d)

    NLP领域中,由于自然文本是一维的,通常使用一维卷积即可达到要求. 在实际应用中,经embedding层处理后的数据格式一般为(batch_size, word_embeddings_dim, max ...

最新文章

  1. 关于 ulimit -SHn 65535
  2. 盐城大数据产业园人才公寓_住在永川大数据产业园人才公寓,是一种怎样的体验?...
  3. Hibernate- QBC-基本查询
  4. 硬核干货!揭秘波士顿动力背后的专利技术
  5. cvAdaptiveThreshold源代码的解析
  6. 计算机关闭的时候自动更新,win7自动更新关闭有什么影响_win7系统关闭自动更新的步骤-win7之家...
  7. 线性表的链式存储结构的实现及其应用(C/C++实现)
  8. kaminari分页插件的使用
  9. javascript:void(0)的作用
  10. 人工智能--启发性信息和估价函数
  11. 数据标注员需要专业系统的学习么?
  12. jetson nano 报错Illegal instruction(core dumped)
  13. jQuery搜索高亮显示
  14. Tracer 记录 Controller 日志
  15. 魔方教学系统(基于QT)
  16. 恋恋不忘Day 1-1
  17. 推特CEO杰克·多西去年薪酬仅1.4美元 没有任何股票奖励
  18. 省钱小妙招,隐藏优惠券怎么设置?
  19. AE基础教程第一阶段——20层的简单操作
  20. echarts引入百度地图并且添加点击事件

热门文章

  1. POJ3608(旋转卡壳--求两凸包的最近点对距离)
  2. HDU4353(找一个三角形面积与它里面包含点的比值最小)
  3. Shell函数:Shell函数返回值、删除函数、在终端调用函数
  4. c++ 继承机制易犯的错误
  5. 多线程学习(二)----AfxBeginThread
  6. SqlServer安装出错解决办法
  7. 深入理解Netty高性能网络框架
  8. 聊聊C语言和指针的本质
  9. 压箱底总结:流系统端到端一致性对比
  10. 用 Go 解析复杂 JSON 的思路