torch.nn
1.卷积 Conv
1.1torch.nn.Conv1d
一维卷积nn.Conv1d
用于文本数据,只对宽度进行卷积,对高度不卷积 。通常,输入大小为word_embedding_dim * max_length
,其中,word_embedding_dim
为词向量的维度,max_length
为句子的最大长度。卷积核窗口在句子长度的方向上滑动,进行卷积操作。
定义:
class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
主要参数说明:
in_channels:在文本应用中,即为词向量的维度
out_channels:卷积产生的通道数,有多少个out_channels,就需要多少个一维卷积(也就是卷积核的数量)
kernel_size:卷积核的尺寸;卷积核的第二个维度由in_channels决定,所以实际上卷积核的大小为kernel_size * in_channels
stride:步长大小
padding:对输入的每一条边,补充0的层数
dilation:kernel间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool, optional) - 如果bias=True,添加偏置
m = nn.Conv1d(1,2,3,stride = 2)#in_channels=1,out_channels=2理解为卷积核的个数,kernel_size =3,stride = 2
input = torch.randn(64,1,8)#batch_size =64,1就对应词向量,8=句子长度
output=m(input)
oupput.shape#[64,2,3]
#64和2好理解,输出batch_size和被2个卷积生成的个数。(8=句子长度)-(kernel_size =3)除于步长再加一。
1.2torch.nn.Conv2d
一般来说,二位卷积nn.Conv2d
用于图像数据,对宽度和高度都进行卷积。
定义:
class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
m = nn.Conv2d(1,2,(3,3),stride=(2,1))
input = torch.randn(64,1,8,8)
output = m(input)
print(output.shape)#[64,2,3,6]
kernel_size
和stride
在这都是二维的了,所以输入和输出就相应的扩张一维,output最后的6是因为stride=1。
第一维 | [(8=input[0])-(kernel_size[0] =3)] 除于 (stride[0] =2) 再加 1 =3 |
---|---|
第二维 | [(8=input[1])-(kernel_size[1] =3)] 除于 (stride[1] =1) 再加 1 = 6 |
注意:
PyTorch
中,池化操作默认的stride
大小与卷积核的大小一致 。torch.nn.Conv2d
,通常做法是将 kernel_size(_, embedding)
第二个参数设为词向量长度2.池化 Pool
2.1