新手刚学习卷积,不知道理解的有没有问题,如果有问题劳烦大家指出。

1. PyTorch中的torch.nn.Conv1d()函数

官方文档链接

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

作用是Applies a 1D convolution over an input signal composed of several input planes.
首先要明确CONV1D和一维卷积(1D convolution)并不是一个概念。

参数:

  • in_channels (int) – 输入图片的通道数量。在文本分类中,即为词向量的维度
  • out_channels (int) – 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积
  • kernel_size (int or tuple) – 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积核大小为kernel_size*in_channels
  • stride (int or tuple, optional) – 卷积步长, Default: 1
  • padding (int or tuple, optional) – 输入的每一条边补充0的层数,Default: 0
  • padding_mode (string, optional) – ‘zeros’, ‘reflect’, ‘replicate’ or ‘circular’. Default: ‘zeros’
  • dilation (int or tuple, optional) – Spacing between kernel elements. Default: 1
  • groups (int, optional) – Number of blocked connections from input channels to output channels. Default: 1
    groups参数控制输入和输出的连接。
    当groups = 2时,这个操作相当于有两个conv层并排,每个conv层看到一半的输入通道,产生一半的输出通道,然后两者concate起来。
    当groups = in_channels 并且out_channels = K * in_channels, K是一个正整数, 就得到了 “depthwise convolution”.
    下图是一个图像的depthwise convolution的示例
    详见:卷积神经网络中的Separable Convolution
  • bias (bool, optional) – If True, adds a learnable bias to the output. Default: True

在最简单的情况下,输入维度为(N,Cin,Lin)(N, C_{in}, L_{in})(N,Cin,Lin),输出维度为(N,Cout,Lout)(N, C_{out}, L_{out})(N,Cout,Lout)

  • N:batch size
  • C表示通道数量
  • L是信号序列的长度
  • ⋆ 表示做互相关函数(cross-correlation)计算


这个公式看着非常的抽象,暂且放在一边。
先来观察输入输出,不考虑代表batch size的N
那么输入为一个(Cin,Lin)(C_{in}, L_{in})(Cin,Lin)大小的矩阵,输出为(Cout,Lout)(C_{out}, L_{out})(Cout,Lout)大小的矩阵
其中LoutL_{out}Lout的大小可以根据输入大小和卷积核的参数来确定。

通俗地说,LoutL_{out}Lout代表一个filter能在输入中滑动多少次。
再看一下weight的维度

out_channels应该表示有out_channels个的卷积核,暂且设groups为1,即一个卷积核要处理输入的所有通道。那么卷积核的尺寸为(Cin,kernelsize)(C_{in}, kernel_size)(Cin,kernelsize)
再来看离散信号的互相关函数计算公式:

看了Weight的size和互相关函数的公式,再回头去看公式,就能大致了解了。
然后我将CONV1D的计算画成了一张图:

下面来对上图做一些说明,暂时不考虑batch size,先设batch size = 1
Weight中存放了CoutC_{out}Cout个卷积核,对应了CoutC_{out}Cout个输出的feature map
每一个卷积核的kernel_size是我们定义的,卷积核的另一个维度为输入通道数CinC_{in}Cin
我们先来看一个输出的feature map如何计算

  • 先取一个卷积核Weight[j,:,:],让其在输入数据中“滑动”,它能“滑动”多少次,决定了输出的序列长度。
  • 输入矩阵的第k行和卷积核的第k行做互相关的计算,这个计算,就好似卷积核不断移动,与输入对应位置的元素做对应元素逐个相乘并求和。
  • 最后要纵向看,输入的每一个通道与卷积核的相应行卷积出的向量(序列)要加在一起,也就是公式中对k做的求和。

代码示例

import torch
import torch.nn as nn# 输入通道大小为16, 输出通道大小为33, kernel_size为3, 步长为2
m = nn.Conv1d(16, 33, 3, stride=2)
# 输入数据,假设batch_size为20, 输入通道数为16, 序列长度为50
input = torch.randn(20, 16, 50)
# 根据公式可计算出输出序列长度(50-1x(3-1)-1)/2 + 1 = 24
output = m(input) # 20, 33, 24

2. 使用Conv1d()对文本进行卷积

下面这个例子来自斯坦福cs224n 2019年的课件
CS224N Winter 2019

PyTorch实现

import torch
import torch.nn as nnbatch_size = 16
word_embed_size = 4     # embedding维度,对应输入通道数量
seq_len = 7               # 句子长度,对应输入序列长度input = torch.randn(batch_size, word_embed_size, seq_len)
conv1 =  torch.nn.Conv1d(in_channels=word_embed_size,out_channels=3,kernel_size=3,padding = 1)
hidden1 = conv1(input)   #torch.Size([16, 3, 7])
# max pooling
hidden2 = torch.max(hidden1, dim=2)

根据PyTorch学习CONV1D相关推荐

  1. Pytorch学习 - Task5 PyTorch卷积层原理和使用

    Pytorch学习 - Task5 PyTorch卷积层原理和使用 1. 卷积层 (1)介绍 (torch.nn下的) 1) class torch.nn.Conv1d() 一维卷积层 2) clas ...

  2. Pytorch 学习(6):Pytorch中的torch.nn Convolution Layers 卷积层参数初始化

    Pytorch 学习(6):Pytorch中的torch.nn  Convolution Layers  卷积层参数初始化 class Conv1d(_ConvNd):......def __init ...

  3. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  4. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  5. pytorch 学习中安装的包

    记录pytorch学习遇到的包 1.ImportError: cannot import name 'PILLOW_VERSION' torchvision 模块内import pillow的时候发现 ...

  6. pytorch学习笔记(二):gradien

    pytorch学习笔记(二):gradient 2017年01月21日 11:15:45 阅读数:17030

  7. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  8. 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)

    初学者快速掌握主流深度学习框架Tensorflow.Keras.Pytorch学习代码 一.TensorFlow 1.资源地址: 2.资源介绍: 3.配置环境: 4.资源目录: 二.Keras 1.资 ...

  9. Pytorch学习 - 保存模型和重新加载

    Pytorch学习 - 保存和加载模型 1. 3个函数 2. 模型不同后缀名的区别 3. 保存和重载模型 参考资料: Pytorch官方文档链接 某博客 1. 3个函数 torch.save() : ...

最新文章

  1. 【组队学习】【29期】1. 编程实践(数据可视化)
  2. EBB-11、Linux启动流程
  3. CVPR‘21 | Involution:超越convolution和self-attention的神经网络新算子
  4. C语言 | 哈夫曼(haffman)算法实现数据的解压缩(源代码)
  5. Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙
  6. Rsync安装与配置
  7. JavaScript正则表达式之分组匹配 / 反向引用
  8. cesium 隐藏entity_cesium中随entity动态变化的弹出框
  9. 大数据分析服务器硬件配置如何选择
  10. 玩游戏也能赚钱?新手大学生做游戏短视频,一个内容收益200多
  11. 基于element-ui实现待支付订单显示定时器
  12. MIT线性代数笔记一 行图像和列图像
  13. OMAP3530资料
  14. linux内核调试环境搭建-
  15. win7 防火墙开启ping
  16. 微信开发者工具首次登陆提示网络连接失败
  17. OCJP 考试题之八
  18. 刚刚,数学界“诺奖”Abel Prize迎来首位女性得主
  19. 关闭VM中虚拟机与主机时间同步
  20. 压箱底的Mac解压缩软件大放送

热门文章

  1. Openwrt无线管理工具/命令
  2. MeeGo系统和SailFish系统_我是亲民_新浪博客
  3. C#学习之面象对象继承练习(二)
  4. 华为云 IoT 物联网数据分析能力详解
  5. KTorrent 2.2 公布
  6. 数学建模比赛题型划分、常用算法及其适用场景
  7. Oulipo(欧力波)(经典kmp模板题) HDU-1686
  8. HttpClient 实现 socks 代理
  9. php artisan command,artisan command 小技巧
  10. linux挂载移动硬盘 格式化_Linux(CentOS)挂载NTFS格式的U盘、移动硬盘