ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Convolutional Neural Networks

2019-08-25 18:51:39  阅读:372  来源: 互联网

标签:Convolutional nn Neural 卷积 self 先验 CNN Networks out


原文引用https://www.dazhuanlan.com/2019/08/25/5d625a7694a88/


Convolutional Neural Networks

白雪峰 — xfbai@mtlab.hit.edu.cn.
这是一篇关于CNN的总结

Outline

  • CNN栗子镇楼
  • What is CNN
    • 什么是卷积
    • 什么是池化
  • Why CNN
  • 对CNN的其他一些理解
  • CNN实现(接口)

1. CNN栗子(A Beginning Glimpse of CNN)

(1)Modern CNN since Yann LeCun
enter image description here
(2)
DeepID

2. What is CNN?

神经网络?卷积?

2.1 什么是卷积?

卷积的定义:

其连续的定义为:
$(fg)(n) = int_{ - infty }^{ + infty } {f(t)g(n-t)dt}$
其离散的定义为:
$(f
g)(n) = sum_{t = - infty} ^{ + infty } {f(t)g(n-t)}$

特点: 
enter image description here

2.2 离散卷积的栗子:

丢骰子,两个骰子加起来要等于4的概率是多少?

$(f*g)(4) = sum_{m = 1} ^{ 3 } {f(m)g(4-m)}$

a. 二维离散的卷积:

$(fg)(m,n) = sumlimits{k=0}^{2}sumlimits{h=0}^{2}f(h,k)g(m-h,n-k)$
则 (f
g)(1,1) ?
enter image description here

离散的卷积可以看成是矩阵的乘法(翻转的)

2.3 用到二维图像上:

a.关于卷积中常用到的一些概念:

In Image Processing
– Convolution is always named filtering, and there are many famous filters/convolution kernels that extract intuitive features in images

enter image description here
通过在输入数据上不断移动卷积核,来提取不同位置的特征.

b. 图像上作卷积的效果:

enter image description here
enter image description here

2.4 用到神经网络中

enter image description here

2.5 卷积的细节

a. filter/Kernel size, number

假设神经网络的输入是6*6的image,
enter image description here
那么,,,

再来个更形象的:
enter image description here

b. Stride

The step size you take the filter to sweep the
image

enter image description here

c. Zero-padding

  1. A way not to ignore pattern on border
  2. New image is smaller than the original image

enter image description here

d.Channel

enter image description here

2.6 池化(Pooling)

Pooling layers subsample their input

1. Spatial pooling (also called subsampling or

downsampling) reduces the dimensionality of
each feature map

2. Retains the ***most important information***

1. Max pooling例子:

enter image description here

Pooling is unsensitive to local translation.(局部不变性)
– “if we translate the input by a small amount,
the values of most of the pooled outputs do
not change.”
enter image description here

2. Pooling的变种

Pooling should be designed to fit specific
applications.

  • Max pooling
  • Average pooling
  • Min pooling
  • l 2 -norm pooling
  • Dynamic k-pooling
  • Etc.

3. Pooling的性质

  • Makes the input representation (feature dim) smaller and more manageable
  • Reduces number of parameters and computations in the network, therefore, controlling overfitting
  • Makes the network invariant to small transformations, distortions and translations in the input image
  • Help us arrive at almost scale invariant representation of our image

2.7 Flatten

enter image description here

2.8 Convolution v.s. Fully Connected

enter image description here

enter image description here

enter image description here

2.9 The whole CNN

enter image description here

enter image description here

##3. Why CNN

  • Some patterns are much smaller than the whole image.
    enter image description here

  • The same patterns appear in different regions.
    enter image description here

  • Subsampling the pixels will not change the object
    enter image description here

Soga~

enter image description here

4. 对CNN的其他一些理解

4.1 关于接受域(receptive field)

称在底层中影响上层输出单元 $s$ 的单元集合为 $s$ 的接受域(receptive field).
enter image description here

enter image description here

4.2 卷积与池化作为一种无限强的先验

首先,弱先验具有较高的熵值,因此自由性较强.强先验具有较低的熵值,这样的先验在决定参数最终取值时可以起着非常积极的作用.

把卷积网络类比成全连接网络,但对于网络的权重具有无限强的先验.a) 所有隐藏单元的权重是共享的.b) 除了一些连续的小单元的权重外,其他的权重都是0.c) 池化也是一个无限强的先验:每个单元都具有对少量平移的不变性.

卷积和池化可能导致欠拟合! 任何其他先验类似,卷积和池化只有当先验的假设合理且正确时才有用。如果一项任务依赖于保存精确的空间信息,那么在所有的特征上使用池化将会增大训练误差。

根据实际需求选取先验

CNN实现

1. 反向传播

基本与FFNNs相同.

2. 共享权值的梯度问题

一个常见的做法:取梯度的平均值

3. CNN in Keras

enter image description here

enter image description here

4. CNN in Pytorch

a) Pytorch 相关接口

torch.nn.Conv2d:
enter image description here

torch.nn.functional.max_pool2d:
enter image description here

b) LeNet in PyTorch.

import torch.nn as nn
import torch.nn.functional as F

class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 5)   #in_channels:1, out_channels:6, kernel_size:5   
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1   = nn.Linear(16*5*5, 120)
        self.fc2   = nn.Linear(120, 84)
        self.fc3   = nn.Linear(84, 10)

    def forward(self, x):
        out = F.relu(self.conv1(x))
        out = F.max_pool2d(out, 2)
        out = F.relu(self.conv2(out))
        out = out.view(out.size(0), -1)
        out = F.relu(self.fc1(out))
        out = F.relu(self.fc2(out))
        out = F.softmax(self.fc3(out))
        return out

标签:Convolutional,nn,Neural,卷积,self,先验,CNN,Networks,out
来源: https://www.cnblogs.com/petewell/p/11408855.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有