CNN卷积层的改变

新人学习。

Conv1d
pytorch之nn.Conv1d详解_sunny_xsc1994的专栏-CSDN博客_conv1d

一维卷积处理的方式其实跟二维卷积是一样的,都是通过一个卷积核的感受野去加权处理生成一个新的特征图。比如一个数据是[batchsize, channel, length],这里用一个文本的信息来具体举例子,batchsize代表句子的个数,channel是一个句子中单词的个数,length是一个单词的向量表征。这个时候就可以设置一个conv1d的卷积层(in_channel=channel,out_channel=UwantChannel,kernel_size = UwantSize)),这个时候,conv1d处理数据是channel*UwantSize的大小一起处理,也就是类似于二维卷积处理RGB图像一样,也是三个通道的卷积同时加权处理后相加,一维也是channle(即单词个数)个通道一起加权处理后相加,只不过这里把单词数看成了通道而已。

import torch
import torch.nn as nn
# 假设输入序列的长度为34,每个元素的维度是1
sequence_length = 5
# 定义卷积核的大小
kernel_size = 3
# 定义一维卷积层
conv1d_layer = nn.Conv1d(in_channels=2, out_channels=3, kernel_size=kernel_size)
# 创建一个随机输入序列
input_sequence = torch.randn(1, 2, sequence_length)
# 对输入序列进行卷积操作
output_sequence = conv1d_layer(input_sequence)

weight = conv1d_layer.weight[0,:].detach().numpy()
bias = conv1d_layer.bias[0].detach().numpy()
input = input_sequence.squeeze(0).detach().numpy()
weight[0,0]*input[0,0]+weight[0,1]*input[0,1]+weight[0,2]*input[0,2]+weight[1,0]*input[1,0]+weight[1,1]*input[1,1]+weight[1,2]*input[1,2]+bias
-0.07071471
output_sequence[0,0,0]
tensor(-0.0707, grad_fn=<SelectBackward0>)
output_sequence[0,0,0].detach().numpy()
array(-0.07071471, dtype=float32)

Conv2d:

pytorch之torch.nn.Conv2d()函数详解_夏普通-CSDN博客_torch.nn.conv2d

1*1卷积:

卷积神经网络中用1*1 卷积有什么作用或者好处呢? - 知乎

详细学习1*1卷积核_庆志的小徒弟-CSDN博客_1*1 卷积核

查看以上资料后得到的想法。如果理解错了请告诉我,谢谢,互相学习。

1*1卷积就是可以通过只进行改变Channel维度的参数,进行升维以及降维功能。

如果想要产生不同的feature map(特指经过卷积层出来后的特征),就只需要设置不同的conv2d层,改变其中的output_channels维度就行了。理解成每一个conv2d就是一个设置好的滤波器群,output是多少就有多少个滤波器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值