CNN

Code

alexnet以及paddlepaddle框架为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class AlexNet(fluid.dygraph.Layer):
def __init__(self, num_classes=1):
super(AlexNet, self).__init__()
# num_channels相当于输入维度, num_filters相当于输出维度,
# filter_size是卷积核尺寸, stride为滑动步长, padding为填充
self.conv1 = Conv2D(num_channels=3, num_filters=96, filter_size=11, stride=4, padding=5, act='relu')
self.pool1 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')
self.conv2 = Conv2D(num_channels=96, num_filters=256, filter_size=5, stride=1, padding=2, act='relu')
self.pool2 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')
self.conv3 = Conv2D(num_channels=256, num_filters=384, filter_size=3, stride=1, padding=1, act='relu')
self.conv4 = Conv2D(num_channels=384, num_filters=384, filter_size=3, stride=1, padding=1, act='relu')
self.conv5 = Conv2D(num_channels=384, num_filters=256, filter_size=3, stride=1, padding=1, act='relu')
self.pool5 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')

self.fc1 = Linear(input_dim=12544, output_dim=4096, act='relu')
self.drop_ratio1 = 0.5
self.fc2 = Linear(input_dim=4096, output_dim=4096, act='relu')
self.drop_ratio2 = 0.5
self.fc3 = Linear(input_dim=4096, output_dim=num_classes)

def forward(self, x):
x = self.conv1(x)
x = self.pool1(x)
x = self.conv2(x)
x = self.pool2(x)
x = self.conv3(x)
x = self.conv4(x)
x = self.conv5(x)
x = self.pool5(x)
x = fluid.layers.reshape(x, [x.shape[0], -1])
x = self.fc1(x)

x = fluid.layers.dropout(x, self.drop_ratio1)
x = self.fc2(x)
x = fluid.layers.dropout(x, self.drop_ratio2)
x = self.fc3(x)
return x

with fluid.dygraph.guard():
model = AlexNet()

术语解释

  • 卷积核 num_filters
  • 填充 padding
  • 滑动步长 strides
  • 通道数

卷积核

在飞桨中,num_channels为输入维度,num_filters为输出维度,filter_size为卷积核尺寸,

填充

填充主要是为了保证不丢失边缘数据,同时也应该注意填充尺寸不应过大,避免引入过多的无用数据

滑动步长

卷积核在输入的数据上会先沿着水平方向,再沿着垂直方向进行卷积操作,如果步长为1,name卷积核在水平方向上每操作一次,就向右移动一格,在进行下一次操作.卷积核中值为0的部分对最终结果没有贡献,但是他们也参与卷积

池化

池化主要用于降维同时保留关键特征

  • 最大池化
  • 平均池化
  • 最小池化

步长为1的最大池化:

img

输出特征计算公式

image

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2017-2021 More Star

请我喝杯咖啡吧~

支付宝
微信