根据PyTorch学习CONV1D
新手刚学习卷积,不知道理解的有没有问题,如果有问题劳烦大家指出。
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相关推荐
- Pytorch学习 - Task5 PyTorch卷积层原理和使用
Pytorch学习 - Task5 PyTorch卷积层原理和使用 1. 卷积层 (1)介绍 (torch.nn下的) 1) class torch.nn.Conv1d() 一维卷积层 2) clas ...
- Pytorch 学习(6):Pytorch中的torch.nn Convolution Layers 卷积层参数初始化
Pytorch 学习(6):Pytorch中的torch.nn Convolution Layers 卷积层参数初始化 class Conv1d(_ConvNd):......def __init ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...
- pytorch 学习中安装的包
记录pytorch学习遇到的包 1.ImportError: cannot import name 'PILLOW_VERSION' torchvision 模块内import pillow的时候发现 ...
- pytorch学习笔记(二):gradien
pytorch学习笔记(二):gradient 2017年01月21日 11:15:45 阅读数:17030
- PyTorch学习笔记(二)——回归
PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...
- 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)
初学者快速掌握主流深度学习框架Tensorflow.Keras.Pytorch学习代码 一.TensorFlow 1.资源地址: 2.资源介绍: 3.配置环境: 4.资源目录: 二.Keras 1.资 ...
- Pytorch学习 - 保存模型和重新加载
Pytorch学习 - 保存和加载模型 1. 3个函数 2. 模型不同后缀名的区别 3. 保存和重载模型 参考资料: Pytorch官方文档链接 某博客 1. 3个函数 torch.save() : ...
最新文章
- 【组队学习】【29期】1. 编程实践(数据可视化)
- EBB-11、Linux启动流程
- CVPR‘21 | Involution:超越convolution和self-attention的神经网络新算子
- C语言 | 哈夫曼(haffman)算法实现数据的解压缩(源代码)
- Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙
- Rsync安装与配置
- JavaScript正则表达式之分组匹配 / 反向引用
- cesium 隐藏entity_cesium中随entity动态变化的弹出框
- 大数据分析服务器硬件配置如何选择
- 玩游戏也能赚钱?新手大学生做游戏短视频,一个内容收益200多
- 基于element-ui实现待支付订单显示定时器
- MIT线性代数笔记一 行图像和列图像
- OMAP3530资料
- linux内核调试环境搭建-
- win7 防火墙开启ping
- 微信开发者工具首次登陆提示网络连接失败
- OCJP 考试题之八
- 刚刚,数学界“诺奖”Abel Prize迎来首位女性得主
- 关闭VM中虚拟机与主机时间同步
- 压箱底的Mac解压缩软件大放送
热门文章
- Openwrt无线管理工具/命令
- MeeGo系统和SailFish系统_我是亲民_新浪博客
- C#学习之面象对象继承练习(二)
- 华为云 IoT 物联网数据分析能力详解
- KTorrent 2.2 公布
- 数学建模比赛题型划分、常用算法及其适用场景
- Oulipo(欧力波)(经典kmp模板题) HDU-1686
- HttpClient 实现 socks 代理
- php artisan command,artisan command 小技巧
- linux挂载移动硬盘 格式化_Linux(CentOS)挂载NTFS格式的U盘、移动硬盘