新人学习。
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是多少就有多少个滤波器