飞桨fluid.layers

@[TOC]飞桨fluid.layers

因为错过了第一期的训练营,我在完成第二期的作业时碰到好多的问题,费了很大的劲才解决,当时就下定决心一定要去回顾第一期的内容。这几天我学习了第一期第一节到第四节的内容,受益匪浅!

原来飞桨的layers层已经实现了许多神经网络的基本函数,飞桨称之为算子,比如relu, sigmoid, tanh, sofmax, fc全连接,线性回归linear,卷积神经网络的卷积层和池化层,各种损失函数和优化方法。 使用飞桨构建神经网路其实就是调用这些已经做好的算子,在网络结构,层次叠加,参数变化上的一个组网的过程。在组网之后一定要定义forward函数。比如下面这个摘自训练营内容的源码,利用卷积层,池化层,,relu, 和线性回归linear, 组建了一个神经网络,包含了两个卷积层,和一个全连接层:

# 多层卷积神经网络实现
class MNIST(fluid.dygraph.Layer):
     def __init__(self):
         super(MNIST, self).__init__()
         
         # 定义卷积层,输出特征通道num_filters设置为20,卷积核的大小filter_size为5,卷积步长stride=1,padding=2
         # 激活函数使用relu
         self.conv1 = Conv2D(num_channels=1, num_filters=20, filter_size=5, stride=1, padding=2, act='relu')
         # 定义池化层,池化核pool_size=2,池化步长为2,选择最大池化方式
         self.pool1 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')
         # 定义卷积层,输出特征通道num_filters设置为20,卷积核的大小filter_size为5,卷积步长stride=1,padding=2
         self.conv2 = Conv2D(num_channels=20, num_filters=20, filter_size=5, stride=1, padding=2, act='relu')
         # 定义池化层,池化核pool_size=2,池化步长为2,选择最大池化方式
         self.pool2 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')
         # 定义一层全连接层,输出维度是1,不使用激活函数
         self.fc = Linear(input_dim=980, output_dim=1, act=None)
         
    # 定义网络前向计算过程,卷积后紧接着使用池化层,最后使用全连接层计算最终输出
     def forward(self, inputs):
         x = self.conv1(inputs)
         x = self.pool1(x)
         x = self.conv2(x)
         x = self.pool2(x)
         x = fluid.layers.reshape(x, [x.shape[0], -1])
         x = self.fc(x)
         return x

组好神经网络之后,就是各种数据预处理,参数初始化,然后就是利用飞桨框架以高性能,低延迟的方式读入数据,训练神经网络,优化各种参数。

同时也弄明白了如下几点:

  1. 对于大型数据,可利用yield生成遍历函数,逐步读入所需数据,避免内存溢出。为了提高速度,也可利用飞桨的xmap函数多进程读入数据,建立数据缓冲区。
  2. 对于图像数据的预处理,如果是以相同比例在横向和纵向同时拉升或者压缩图像,这种数据增强没什么意义,因为图像归一化之后会产生相同的结果。
  3. 对于目标检测,要注意图数据增强,极大可能会改变目标的坐标,因此要做相应的变化
  4. 图像处理,不可避免要经过卷积层。卷积层对图像的格式要求是4维的【N,C,H,W】。而图像的格式基本上是【H,W,C】,因此首先要对图像转置transpose(2,0,1)变成【C,H,W】。在检测单张图片时,还要把它转化为4维格式reshape(1,C,H,W), 才能输入神经网络中进行检测。这也是我在尝试blazeface模型用PaddleServing部署之后,客户端检测单张图片一直出错的原因。

你可能感兴趣的:(飞桨fluid.layers)