卷积神经网络

Convolution Neural Network

  • CNN将输入数据看成三维的张量 (Tensor), 之前的NN把输入数据看作向量
  • 引入 Convolution (卷积) 操作, 单元变成卷积核, 部分连接共享权重. 一个卷积核处理一个三维的张量, 得到一个两维的张量.
  • 引入 Pooling (采样) 操作, 降低输入张量的平面尺寸
  • , 即邻近样本的非线性组合, 映射在图像领域, 就是可视化的特征; 映射在文本领域, 就是句法和词嵌入之间的关联; 映射在Speech领域, 就是语音音节的处理.

三维张量

Exmaple

img = torch.rand(3,160,320) #D=3(color=RGB),H=160,W=320
itorch.image(img)

卷积

  • 卷积核尺寸: DHW, 卷积核的深度和输入图像是一致的.
  • 卷积滑动参数: stride/padding
  • 每个卷积核带有一个bias

Example http://cs231n.github.io/convolutional-networks/

require('nn')
img = torch.rand(3,5,5)    #输入x: 深度为3, 高和宽均为5

conv = nn.SpatialConvolution(3,2,3,3,2,2,1,1)
#参数分别表示输入深度(3),卷积核个数(2),卷积核的尺寸(3*3),
h方向的stride(2),w方向的stride(2),
h方向的padding大小(1),w方向的padding大小(1)(padding:补0或补重复数)

img_out=conv:forward(img)        #Forward计算

Pooling

  • 改变图像尺寸的操作, 可以逐层的把图像尺寸一点点降下来, 减少维度
  • max pool / average pool

Example

require('nn')
img = torch.rand(1,6,6)    

pooling = nn.SpatialMaxPooling(2,2,2,2)
#Pooling的长宽均为2,上下的步长均为2

img_out=pooling:forward(img)

Batched Normalization

  • Input: Values of over a mini-batch: ; Parameters to be learned:
  • Output:

Example:

require('nn')
img = torch.rand(4,4)
bn = nn.BatchNormalization(4,4)
img_out = bn:forward(img)

卷积网络设计

针对图像识别:

  • 尽量使用33尺寸的卷积核, 甚至更小(22或1*1); stride取1(第一层可以采用稍大尺寸的卷积核)
  • 使用Pooling(2*2)对网络进行1/4下采样
  • 采用多层次架构, 采用残差结构实现更深的网络
  • Patter设计
    • [Conv-ReLU-Pool]N + [FC-ReLU]M + Softmax
    • [Conv-ReLU-Conv-ReLU-Pool]N + [FC-ReLU]M + Softmax
    • 注意最后一层FC(Full connected,全连接), 不采用ReLU激活函数

卷积网络中的正则化

  • 训练时, 对图像增加随机噪声
  • 在257257图像中, 随机采样224224的子图
  • 图像采用随机左右镜像
  • 在FC层之间使用Dropout技术
  • 尝试BN, 残差网络结构

残差网络结构

实战

Example: Deep Dream


反馈与建议

参考文献

results matching ""

    No results matching ""