torch.nn.Conv1d及一维卷积详解[通俗易懂]

近日在搞wavenet,期间遇到了一维卷积,在这里对一维卷积以及其pytorch中的API进行总结,方便下次使用之前对二维卷积是比较熟悉的,在初次接触一维卷积的时候,我以为是一个一维的卷积核在一条线上做卷积,但是这种理解是错的,一维卷积不代表卷积核只有一维,也不代表被卷积的feature也是一维。一维的意思是说卷积的方向是一维的。下边首先看一个简单的一维卷积的例子(batchsize是1,也只…

大家好,又见面了,我是你们的朋友全栈君。

近日在搞wavenet,期间遇到了一维卷积,在这里对一维卷积以及其pytorch中的API进行总结,方便下次使用

之前对二维卷积是比较熟悉的,在初次接触一维卷积的时候,我以为是一个一维的卷积核在一条线上做卷积,但是这种理解是错的,一维卷积不代表卷积核只有一维,也不代表被卷积的feature也是一维。一维的意思是说卷积的方向是一维的。

下边首先看一个简单的一维卷积的例子(batchsize是1,也只有一个kernel):

输入:

一个长度为35的序列,序列中的每个元素有256维特征,故输入可以看作(35,256)
卷积核: size = (k,) , (k = 2)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUj1VA0m-1573028650763)(https://ranchofromxgd.github.io/_posts/assets/2019-11-06-16-16-37.png)]

这幅图只说明了只有一个数据的情况,如果将数据打包成batch,可以用代码表示如下:

    from torch.autograd import Variable
    conv1 = nn.Conv1d(in_channels=256,out_channels = 100, kernel_size = 2)
    input = torch.randn(32, 35, 256)
    # batch_size x text_len x embedding_size -> batch_size x embedding_size x text_len
    input = input.permute(0, 2, 1)
    input = Variable(input)
    out = conv1(input)
    print(out.size())

输出:

torch.Size([32, 100, 34])

在分析这个结果之前先来看一下nn.Conv1d的官方文档

// 可以理解为特征的维度
in_channels – Number of channels in the input image 
//输出的通道数,可以理解为卷积核的数量
out_channels – Number of channels produced by the convolution
// 卷积核的大小,只需要指定卷积方向的大小(因为是一维的)
kernel_size – Size of the convolving kernel
stride – Stride of the convolution
padding – Zero-padding added to both sides of the input
dilation – Spacing between kernel elements
groups – Number of blocked connections from input channels to output channels
bias – If True, adds a learnable bias to the output

再来看输出:torch.Size([32, 100, 34])

输入数据第一维表示batchsize,后边两维和前边的例子一样,不同的是输出,长度变为了34(卷积核大小为2),由于有100个卷积核,故生成了100个feature map

可能还会有一个疑惑,就是感觉100和34位置反过来了,这是因为nn.Conv1d对输入数据的最后一维进行一维卷积,为了将卷积方向设置正确,我们需要将输入序列长度这一维放到最后,即使用permute函数,这样就可以实现一维卷积。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129290.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 加壳工具简单使用

    加壳工具简单使用时间20210107,环境winxp介绍一些加壳工具和和它们的简单使用,为了方便描述,就先写了一个原程序,原程序的逻辑很简单,代码如下。1. #include<stdio.h>2. intmain()3. {4. inti=5;5. scanf(“%d”,&i);6. while(i–)7. {8. printf(“HelloWorld%d\n”,i);9. }

  • 全012路规律_11选5判断012路的方法

    全012路规律_11选5判断012路的方法堆题目链接将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被

  • sql语句面试经典50题_sql基础知识面试题

    sql语句面试经典50题_sql基础知识面试题目录​SQL基础知识整理:常见的SQL面试题:经典50题三、50道面试题2.汇总统计分组分析3.复杂查询sql面试题:topN问题4.多表查询【面试题类型总结】这类题目属于行列如何互换,解题思路如下:其他面试题:SQL基础知识整理:select查询结果如:[学号,平均成绩:组函数avg(成绩)]from从哪张表中查找数…

  • poe交换机的供电方式_交换机需要电源吗

    poe交换机的供电方式_交换机需要电源吗前言:近年来,PoE供电技术的发展势头越来越强劲。凭借简化用电设备的安装和部署、节能,安全等一系列优势,PoE供电成为无线覆盖、安防监控、以及智能电网等场景的新宠。在技术交流中,工程商困惑最多的其中就有POE供电的问题,本文就汇总了大家最关注的问题,集中解答。 ▶ 问题一:何为PoE技术? PoE(PowerOverEthernet)指的是在现有的以太网Cat.5布线基础…

  • 一个异常:Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to

    一个异常:Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to

  • rootfs.bin_libhdfs

    rootfs.bin_libhdfs忘了到底前几年看的一篇什么busybox的教程,写的及其复杂,以至于让我这么久以来一直不敢再去碰这个东西,直到今天又再次有了这个需求,特来再搞一次,没想到不到俩小时,一次搞定,特将这过程记录下来,以后也好有个参考。1环境宿主机:Ubuntu18.04交叉编译工具链:aarch64-linux-gnu-gcc7.4.0目标机:Armv8i.MX8EVKboard2下载…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号