pytorch之nn.Conv1d详解

article/2025/11/6 9:05:49

博主欢迎转载,但请一定要给出原文链接,标注出处!!!谢谢~

pytorch之nn.Conv1d详解

(没想到当初整理这篇,竟然有那么多人看,而且还有不少人提问。由于CSDN不常登陆,所以评论不一定及时回复。大家如果用知乎的话,可以知乎私信我:Sunny.夏的知乎个人主页。我看到消息肯定会及时回复大家的。对于那些评论了几个月博主都没回的,实在抱歉,千万别拿大刀砍我。。。我是真的不常登,只有在写文章的时候才会登下博客)

之前学习pytorch用于文本分类的时候,用到了一维卷积,花了点时间了解其中的原理,看网上也没有详细解释的博客,所以就记录一下。

Conv1d

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

  • in_channels(int) – 输入信号的通道。在文本分类中,即为词向量的维度
  • out_channels(int) – 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积
  • kernel_size(int or tuple) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kernel_size*in_channels
  • stride(int or tupleoptional) - 卷积步长
  • padding (int or tupleoptional)- 输入的每一条边补充0的层数
  • dilation(int or tuple, `optional``) – 卷积核元素之间的间距
  • groups(intoptional) – 从输入通道到输出通道的阻塞连接数
  • bias(booloptional) - 如果bias=True,添加偏置

举个例子:

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)
out = conv1(input)
print(out.size())

这里32为batch_size,35为句子最大长度,256为词向量

再输入一维卷积的时候,需要将32*35*256变换为32*256*35,因为一维卷积是在最后维度上扫的,最后out的大小即为:32*100*(35-2+1)=32*100*34

附上一张图,可以很直观的理解一维卷积是如何用的:

图片来源:Keras之文本分类实现

图中输入的词向量维度为5,输入大小为7*5,一维卷积核的大小为2、3、4,每个都有两个,总共6个特征。

对于k=4,见图中红色的大矩阵,卷积核大小为4*5,步长为1。这里是针对输入从上到下扫一遍,输出的向量大小为((7-4)/1+1)*1=4*1,最后经过一个卷积核大小为4的max_pooling,变成1个值。最后获得6个值,进行拼接,在经过一个全连接层,输出2个类别的概率。

附上一个代码来详解:

其中,embedding_size=256, feature_size=100, window_sizes=[3,4,5,6], max_text_len=35

class TextCNN(nn.Module):def __init__(self, config):super(TextCNN, self).__init__()self.is_training = Trueself.dropout_rate = config.dropout_rateself.num_class = config.num_classself.use_element = config.use_elementself.config = configself.embedding = nn.Embedding(num_embeddings=config.vocab_size, embedding_dim=config.embedding_size)self.convs = nn.ModuleList([nn.Sequential(nn.Conv1d(in_channels=config.embedding_size, out_channels=config.feature_size, kernel_size=h),
#                              nn.BatchNorm1d(num_features=config.feature_size), nn.ReLU(),nn.MaxPool1d(kernel_size=config.max_text_len-h+1))for h in config.window_sizes])self.fc = nn.Linear(in_features=config.feature_size*len(config.window_sizes),out_features=config.num_class)if os.path.exists(config.embedding_path) and config.is_training and config.is_pretrain:print("Loading pretrain embedding...")self.embedding.weight.data.copy_(torch.from_numpy(np.load(config.embedding_path)))    def forward(self, x):embed_x = self.embedding(x)#print('embed size 1',embed_x.size())  # 32*35*256
# batch_size x text_len x embedding_size  -> batch_size x embedding_size x text_lenembed_x = embed_x.permute(0, 2, 1)#print('embed size 2',embed_x.size())  # 32*256*35out = [conv(embed_x) for conv in self.convs]  #out[i]:batch_size x feature_size*1#for o in out:#    print('o',o.size())  # 32*100*1out = torch.cat(out, dim=1)  # 对应第二个维度(行)拼接起来,比如说5*2*1,5*3*1的拼接变成5*5*1#print(out.size(1)) # 32*400*1out = out.view(-1, out.size(1)) #print(out.size())  # 32*400 if not self.use_element:out = F.dropout(input=out, p=self.dropout_rate)out = self.fc(out)return out

embed_x一开始大小为32*35*256,32为batch_size。经过permute,变为32*256*35,输入到自定义的网络后,out中的每一个元素,大小为32*100*1,共有4个元素。在dim=1维度上进行拼接后,变为32*400*1,在经过view,变为32*400,最后通过400*num_class大小的全连接矩阵,变为32*2。


http://chatgpt.dhexx.cn/article/nn1sT8Xg.shtml

相关文章

语义分割 - DeepLab系列(v1, v2, v3, v3+)

目录 论文精读四种版本网络的对比v1v2v3v3 先验知识分辨率的损失多尺度特征(multi-scale features)空洞卷积(Dilated/Atrous Convolution)标准卷积与空洞卷积空洞卷积的作用为了保证输出图像尺寸不变时,padding的设定值…

从一维卷积、因果卷积(Causal CNN)、扩展卷积(Dilation CNN) 到 时间卷积网络 (TCN)

来源: AINLPer微信公众号(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2022-09-30 引言 卷积神经网络 (CNN) 尽管通常与图像分类任务相关,但经过改造,同样可以用于序列建模预测。在本文中&#xf…

Pytorch之经典神经网络语义分割(3.1) —— 空洞卷积 Dilated conv/Atrous Conv (膨胀卷积/扩张卷积)(扩张率dilation rate) pytorch实现

2016年提出的 空洞卷积广泛应用于语义分割与目标检测等任务中 空洞卷积(膨胀卷积/扩张卷积) Dilated/Atrous Convolution 空洞卷积是一种不增加参数量(运算量)同时增加输出单元感受野的一种方法。Atrous 卷积,就是带洞的卷积,卷积核是稀疏的 此外&#x…

pytorch的函数中的dilation参数的作用

如果我们设置的dilation0的话,效果如图: 蓝色为输入,绿色为输出,可见卷积核为3*3的卷积核 如果我们设置的是dilation1,那么效果如图: 蓝色为输入,绿色为输出,卷积核仍为3*3&#x…

Pytorch nn.conv2d 的 参数 dilation =1 究竟是?

在pytorch 的 nn.conv2d 和 nn.ConvTranspose2d都有这个参数 dilation。而且默认参数值是 1。那么,当 dilation1 的时候,对应的究竟是 图1 还是 图2 ?是图2。 图1. 图2. 参考资料 Pytorch Tutorial

nn.Conv2d()中dilation参数的作用

nn.Conv2d()中dilation参数的作用 下面这张图很好的描述了这个参数的作用 优点: 这样每次进行单次计算时覆盖的面积(感受域)增大,最开始时3*3 9 然后是5*5 25最后是7*749,增加了感受域却并未增加计算量&#xff0c…

常规-分组-深度分离-分组深度分离卷积-参数量-计算量-dilation-python实现

不同的卷积操作 本文所用样本一般的卷积(常规的)分组卷积深度分离卷积逐通道卷积(depthwise conv)逐点卷积 (pointwise conv) 分组深度分离卷积上面卷积总结卷积的dilation 本文所用样本 x t o r c h . z …

深度学习中常用的几种卷积(下篇):膨胀卷积、可分离卷积(深度可分离、空间可分离)、分组卷积(附Pytorch测试代码)

卷积分类 一、膨胀卷积1.介绍2.调用方式3.实例4.缺点 二、可分离卷积1.空间可分离卷积1)介绍2)优点及缺点3)实例 2.深度可分离卷积1)介绍2)优点及缺点3)实例 三、分组卷积1.介绍2.调用方式以及nn.Conv2d的g…

tensorlfow 卷积操作解释

解释一下: tf.keras.layers.Conv2D(filters,kernel_size,strides=(1, 1),padding=valid,data_format=None,dilation_rate=(1, 1),groups=1,activation=None,use_bias=True,kernel_initializer=glorot_uniform,bias_initializer=zeros,kernel_regularizer=None,bias_regulariz…

dilation conv 和 deconv

最近工作要用到dilation conv,在此总结一下空洞卷积,并和deconv进行对比。 dilation conv 首先空洞卷积的目的是为了在扩大感受野的同时,不降低图片分辨率和不引入额外参数及计算量(一般在CNN中扩大感受野都需要使用s>1的con…

Halcon 形态学(膨胀(Dilation)、腐蚀(Erosion))

文章目录 1 形态学概念2 膨胀(Dilation) 算子介绍3 腐蚀(Erosion)算子介绍4 膨胀腐蚀 示例15 腐蚀膨胀 示例26 示例原图7 补充:结构元素概念1 形态学概念 图像的形态学处理是对图像的局部像素进行处理,用于从图像中提取有意义的局部图像细节。 通过改变局部区域的像素形态…

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

torch 池化操作 1 池化操作2 类型2.1 MaxPool2d()2.2 MaxUnPool2d()2.3 AvgPool2d()2.4 FractionalMaxPool2d()2.5LPPool2d()2.6AdaptiveMaxPool2d()2.7 AdaptiveAvgPool2d() 3 总结 自我学习记录,他人转载请注明出处 1 池化操作 作用: 提取图片重点特征…

nn.Conv2d中的dilation

参考链接:https://blog.csdn.net/jokerxsy/article/details/108614661 nn.Conv2d中的dilation dilation 1: dilation2:

nn.Conv1d\nn.Conv2d以及groups\dilation参数的理解

文章目录 nn.Conv1dnn.Conv2dnn.Conv2d中groups参数和dilation参数的理解groupsdilation 参考 nn.Conv1d 代码: nn.Conv1d(in_channels 16, out_channels 16, kernel_size (3,2,2), stride (2,2,1), padding [2,2,2])如果输入为: x torch.randn(10,16,30,32,34)则: 1…

剪胀角 angle of dilation

Abaqus选择库伦摩尔塑性模型的时候,需要选择摩擦角和剪胀角。摩擦角物理意义明确,但何为剪胀角?如何影响结果呢?(这两个问题,暂无统一解,Abaqus默认剪胀角最小是0.1) The angle of d…

3.TransposedConv2d实现 (含dilation)

[C 基于Eigen库实现CRN前向推理] 第三部分:TransposedConv2d实现 (含dilation) 前言:(Eigen库使用记录)第一部分:WavFile.class (实现读取wav/pcm,实现STFT)第二部分:Conv2d实现第三部分:Tran…

对卷积层dilation膨胀的作用的理解,caffe-ssd dilation Hole算法解析

先转一篇大佬的博客论文阅读笔记:图像分割方法deeplab以及Hole算法解析 下面是caffe-ssd的vgg16输出后的变化,减少了一个pooling,stride1,然后下一层采用了 dilation方法,作用按上面博客说是 既想利用已经训练好的模…

理解Dilation convolution

论文:Multi-scale context aggregation with dilated convolutions 简单讨论下dilated conv,中文可以叫做空洞卷积或者扩张卷积。首先介绍一下dilated conv诞生背景[4],再解释dilated conv操作本身,以及应用。 首先是诞生背景&a…

卷积膨胀 Dilation

参考:卷积的dilation操作 如果我们设置的dilation0的话,效果如图: 蓝色为输入,绿色为输出,可见卷积核为3*3的卷积核 如果我们设置的是dilation1,那么效果如图: 蓝色为输入,绿色为输出,卷积核仍…

卷积核膨胀(dilation)解析

本文转自http://blog.csdn.net/tangwei2014和https://blog.csdn.net/jiongnima/article/details/69487519,转载目的便于自己查看学习 第一位大神解析: deeplab发表在ICLR 2015上。论文下载地址:Semantic Image Segmentation with Deep Conv…