版权声明:转载请说明来源,谢谢 https://blog.csdn.net/wsp_1138886114/article/details/86666135
一、卷积层
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
)
\rm 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)
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 )
参数:
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:
input:
(
N
,
C
i
n
,
H
i
n
,
W
i
n
)
(N,C_{in},H_{in},W_{in})
( N , C i n , H i n , W i n )
output:
(
N
,
C
o
u
t
,
H
o
u
t
,
W
o
u
t
)
(N,C_{out},H_{out},W_{out})
( N , C o u t , H o u t , W o u t )
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
)
\rm H_{out}=floor((H_{in}+2padding[0]-dilation[0](kernerl\_size[0]-1)-1)/stride[0]+1)
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 )
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
)
\rm W_{out}=floor((W_{in}+2padding[1]-dilation[1](kernerl\_size[1]-1)-1)/stride[1]+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 )
变量:
weight(tensor) - 卷积的权重,大小是(out_channels, in_channels,kernel_size)
bias(tensor) - 卷积的偏置系数,大小是(out_channel)
二、池化层
class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
对于输入信号的输入通道,提供2维最大池化(max pooling)操作
如果输入的大小是(N,C,H,W),那么输出的大小是(N,C,H_out,W_out)和池化窗口大小(kH,kW)的关系是:
o
u
t
(
N
i
,
C
j
,
k
)
=
m
a
x
m
=
0
k
H
−
1
m
a
x
m
=
0
k
W
−
1
i
n
p
u
t
(
N
i
,
C
j
,
s
t
r
i
d
e
[
0
]
h
+
m
,
s
t
r
i
d
e
[
1
]
w
+
n
)
\rm out(N_i, C_j,k)=max^{kH-1}_{m=0}max^{kW-1}_{m=0}input(N_{i},C_j,stride[0]h+m,stride[1]w+n)
o u t ( N i , C j , k ) = m a x m = 0 k H − 1 m a x m = 0 k W − 1 i n p u t ( N i , C j , s t r i d e [ 0 ] h + m , s t r i d e [ 1 ] w + n )
如果padding不是0,会在输入的每一边添加相应数目 的0 dilation用于控制内核点之间的距离。
参数:
kernel_size(int or tuple)
- max pooling的窗口大小 stride(int or tuple, optional)
- max pooling的窗口移动的步长。默认值是kernel_size padding(int or tuple, optional)
- 输入的每一条边补充0的层数 dilation(int or tuple, optional)
– 一个控制窗口中元素步幅的参数 return_indices
- 如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助 ceil_mode
- 如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作
shape:
输入:
(
N
,
C
,
H
i
n
,
W
i
n
)
(N,C,H_{in},W_{in})
( N , C , H i n , W i n ) 输出:
(
N
,
C
,
H
o
u
t
,
W
o
u
t
)
(N,C,H_{out},W_{out})
( N , C , H o u t , W o u t )
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
l
_
s
i
z
e
[
0
]
−
1
)
−
1
)
/
s
t
r
i
d
e
[
0
]
+
1
\rm H_{out}=floor((H_{in} + 2padding[0] - dilation[0](kernel\_size[0] - 1) - 1)/stride[0] + 1
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 l _ s i z e [ 0 ] − 1 ) − 1 ) / s t r i d e [ 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
l
_
s
i
z
e
[
1
]
−
1
)
−
1
)
/
s
t
r
i
d
e
[
1
]
+
1
\rm W_{out}=floor((W_{in} + 2padding[1] - dilation[1](kernel\_size[1] - 1) - 1)/stride[1] + 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 l _ s i z e [ 1 ] − 1 ) − 1 ) / s t r i d e [ 1 ] + 1
三、归一化(BN)
class torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True)
对小批量(mini-batch)3d数据组成的4d输入进行批标准化(Batch Normalization)操作
y
=
γ
∗
x
−
m
e
a
n
[
x
]
V
a
r
[
x
]
+
ϵ
+
β
y=\gamma *\frac{x−mean[x]}{\sqrt{Var[x]}+ϵ}+\beta
y = γ ∗ V a r [ x ]
+ ϵ x − m e a n [ x ] + β
在每一个小批量(mini-batch)数据中,计算输入各个维度的均值和标准差。gamma与beta是可学习的大小为C的参数向量(C为输入大小)
在训练时,该层计算每次输入的均值与方差,并进行移动平均。移动平均默认的动量值为0.1。 在验证时,训练求得的均值/方差将用于标准化验证数据。
参数:
num_features
: 来自期望输入的特征数,该期望输入的大小为 batch_size x num_features x height x width eps
: 为保证数值稳定性(分母不能趋近或取0),给分母加上的值。默认为1e-5。 momentum
: 动态均值和动态方差所使用的动量。默认为0.1。 affine
: 一个布尔值,当设为true,给该层添加可学习的仿射变换参数。 Shape
:- 输入输出相同(N, C,H, W)
例子
m = nn. BatchNorm2d( 100 )
m = nn. BatchNorm2d( 100 , affine= False )
input = autograd. Variable( torch. randn( 20 , 100 , 35 , 45 ) )
output = m( input )