PyTorch全映射层Linear卷积层Conv1d与Conv2d

class torch.nn.Linear(in_features, out_features, bias=True)

对输入数据做线性变换:y=Ax+b

参数:
  • in_features - 每个输入样本的大小
  • out_features - 每个输出样本的大小
  • bias - 若设置为False,这层不会学习偏置。默认值:True
    形状:

输入: (N,in_features)
输出: (N,out_features)

变量:
  • weight -形状为(out_features x in_features)的模块中可学习的权值
  • bias -形状为(out_features)的模块中可学习的偏置
    例子:

m = nn.Linear(20, 30)
input = autograd.Variable(torch.randn(128, 20))
output = m(input)
print(output.size())

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

一维卷积层,输入的尺度是(N, C_in,L),输出尺度( N,C_out,L_out)的计算方式:

o u t ( N i , C o u t j ) = b i a s ( C o u t j ) + k = 0 C i n 1 w e i g h t ( C o u t j , k ) i n p u t ( N i , k ) out(N_i, C_{out_j})=bias(C {out_j})+\sum^{C_{in}-1}_{k=0} weight(C{out_j},k)\bigotimes input(N_i,k)

说明

bigotimes: 表示相关系数计算
stride: 控制相关系数的计算步长
dilation: 用于控制内核点之间的距离
groups: 控制输入和输出之间的连接,
group=1:输出是所有的输入的卷积;
group=2:此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来。

Parameters

in_channels(int) – 输入信号的通道
out_channels(int) – 卷积产生的通道
kerner_size(int or tuple) - 卷积核的尺寸
stride(int or tuple, optional) - 卷积步长
padding (int or tuple, optional)- 输入的每一条边补充0的层数
dilation(int or tuple, optional) – 卷积核元素之间的间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool,optional) - 如果bias=True,添加偏置

shape

输入: (N,C_in,L_in)
输出: (N,C_out,L_out)
输入输出的计算方式:
L o u t = f l o o r ( ( L i n + 2 p a d d i n g d i l a t i o n ( k e r n e r l s i z e 1 ) 1 ) / s t r i d e + 1 ) L_{out}=floor((L_{in}+2padding-dilation(kernerl_size-1)-1)/stride+1)

变量:

weight(tensor) - 卷积的权重,大小是(out_channels, in_channels, kernel_size)
bias(tensor) - 卷积的偏置系数,大小是(out_channel

example
m = nn.Conv1d(16, 33, 3, stride = 2)
input = autograd.Variable(torch.randn(20, 16, 50))
output = m(input)

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

二维卷积层, 输入的尺度是(N, C_in,H,W),输出尺度(N,C_out,H_out,W_out)的计算方式:

o u t ( N i , C o u t j ) = b i a s ( C o u t j ) + k = 0 C i n 1 w e i g h t ( C o u t j , k ) i n p u t ( N i , k ) out(N_i, C_{out_j})=bias(C_{out_j})+\sum^{C_{in}-1}_{k=0}weight(C{out_j},k)\bigotimes input(N_i,k)

说明

bigotimes: 表示二维的相关系数计算
stride: 控制相关系数的计算步长
dilation: 用于控制内核点之间的距离,详细描述在这里
groups: 控制输入和输出之间的连接:
group=1,输出是所有的输入的卷积;
group=2,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来。

参数kernel_sizestride,paddingdilation也可以是一个int的数据,此时卷积heightwidth值相同;也可以是一个tuple数组,tuple的第一维度表示height的数值,tuple的第二维度表示width的数值

Parameters:

in_channels(int) – 输入信号的通道
out_channels(int) – 卷积产生的通道
kerner_size(int or tuple) - 卷积核的尺寸
stride(int or tuple, optional) - 卷积步长
padding(int or tuple, optional) - 输入的每一条边补充0的层数
dilation(intor tuple, optional) – 卷积核元素之间的间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool, optional) - 如果bias=True,添加偏置

shape:

input: (N,C_in,H_in,W_in)
output: (N,C_out,H_out,W_out)
H o u t = f l o o r ( ( H i n + 2 p a d d i n g [ 0 ] d i l a t i o n [ 0 ] ( k e r n e r l s i z e [ 0 ] 1 ) 1 ) / s t r i d e [ 0 ] + 1 ) H_{out}=floor((H_{in}+2padding[0]-dilation[0](kernerl_size[0]-1)-1)/stride[0]+1)

W o u t = f l o o r ( ( W i n + 2 p a d d i n g [ 1 ] d i l a t i o n [ 1 ] ( k e r n e r l s i z e [ 1 ] 1 ) 1 ) / s t r i d e [ 1 ] + 1 ) W_{out}=floor((W_{in}+2padding[1]-dilation[1](kernerl_size[1]-1)-1)/stride[1]+1)

变量:
weight(tensor) - 卷积的权重,大小是(out_channels, in_channels,kernel_size)
bias(tensor) - 卷积的偏置系数,大小是(out_channel

变量
# with square kernels and equal stride
m = nn.Conv2d(16, 33, 3, stride = 2)
# non-square kernels and unequal sride and with padding 
m = nn.Conv2d(16, 33, (3, 5), stride = (2, 1), padding = (4, 2))
# non-square kernels and unequal stride and with padding and dilation
m = nn.Conv2d(16, 33, (3, 5), stride = (2, 1), padding = (4, 2), dilation = (3, 1)
input = autograd.Variable(torch.randn(20, 16, 50, 100))
output = m(input)
发布了182 篇原创文章 · 获赞 101 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/lancecrazy/article/details/100555676