CNN(卷积神经网络)原理讲解及简单代码
一、原理讲解
1. 卷积神经网络的应用
- 分类(分类预测)
- 检索(检索出该物体的类别)
- 检测(检测出图像中的物体,并标注)
- 分割(将图像分割出来)
- 人脸识别
- 图像生成(生成不同状态的图像)
- 自动驾驶
- 等等。。。
2. 传统神经网络与卷积神经网络比较
传统神经网络采用的是全连接神经网络,权重矩阵的参数太多,导致速度减慢,也会产生过拟合。
卷积神经网络通过卷积核,大大降低了参数个数。实现局部关联,参数共享的效果。
3. 卷积神经网络基本结构
- 卷积层
- 激活层(ReLu)
- 池化层
- 全连接层
3.1 卷积层(Convolutional Layer)
卷积是对两个实变函数的一种数学操作,也就是求内积。
在图像处理中,图像是以二维矩阵的形式输入到神经网络的,因此我们需要二维卷积。
图3-1
图3-2
图3-3
图3-1、图3-2、图3-3很好地展示了卷积过程,名称注释如下:
input:输入层,即图像的矩阵向量
kernel:卷积核或称滤波器,可以定义卷积核的大小,图3-1中卷积核的大小为2*2
output:输出,即特征图feature map,通过卷积计算出来的结果。计算公式为input(图3-1中为4*3)•kernel(图3-1中为2*2),两个向量求内积。
stride:步长,即卷积核向右滑动的长度。图3-1中步长为1。
padding:填充,当卷积时,卷积核滑动到最右侧发现无法形成与自己单元一致的向量时,需要在四周用0填充,确保卷积核能完成计算过程。如图3-4所示。
depth/channel:深度,即当前卷积层中卷积核的个数。如图3-4为2层。
图3-4
卷积是从输入图像中提取特征的第一层,Conv层的目标是提取输入数据的特征。 卷积通过使用小方块输入数据学习图像特征来保持像素之间的关系。
输出的特征图(feature map)大小:
图3-5
未加padding时:
(N-F)/stride + 1
加padding时:
(N-F+padding*2)/stride + 1
例子:
input:32*32
filter:10, 5*5
stride:1
padding:2
输出:? (32-5+2*2)/1+1=32 ,即 32*32*10
参数:? (5*5+1)*10
代码实现:
# 定义卷积核,10个卷积核,卷积核大小是5,用Relu激活
conv0 = tf.layers.conv2d(datas, 10, 5, activation=tf.nn.relu)
3.2 池化层(Pooling Layer)
特征:
保留了主要特征的同事减少参数和计算量,防止过拟合,提高模型泛化能力。
它一般处在卷积层和卷积层之间,全连接层和全连接层之间。
类型划分:
max pooling:最大化池化,如图3-6和图3-7所示
average pooling:平均池化,如图3-7所示
图3-6
图3-7
3.3 全连接层(Fully Connected Layer)
- 两层之间所有神经元都有权重连接
- 通常全连接才呢过在卷积神经网络尾部
- 全连接层参数量通常最大
二、代码实战
# 定义卷积层, 20个卷积核,卷积核大小为5, 用Relu激活
conv0 = tf.layers.conv2d(datas, 20, 5, activation=tf.nn.relu)
# 定义max-pooling层,pooling窗口为2*2,步长为2*2
pool0 = tf.layers.max_pooling2d(conv0, [2, 2], [2, 2]) # 定义卷积层,40个卷积核,卷积核大小为4, 用Relu激活
conv1 = tf.layers.conv2d(pool0, 40, 4, activation=tf.nn.relu)
# 定义max-pooling层,pooling窗口为2*2,步长为2*2
pool1 = rf.layers.max_pooling2d(conv1, [2, 2], [2, 2]) # 将3维特征装换为1维向量
flatten = tf.layers.flatten(pool1) # 全连接层,转换为长度为400的特征向量
fc = tf.layers.dense(flatten, 400, activation=tf.nn.relu) # 加上DropOut,防止过拟合
dropput_fc = tf.layers.dropout(fc, dropout_placeholdr) # 未激活的输出层
# num_classes:分类数
logits = tf.layers.dense(dropout_fc, num_classes) predicted_labels = tf.arg_max(ligits, 1)
CNN(卷积神经网络)原理讲解及简单代码的更多相关文章
- cnn(卷积神经网络)比较系统的讲解
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图
tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR
Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- TensorFlow——CNN卷积神经网络处理Mnist数据集
CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...
- 3层-CNN卷积神经网络预测MNIST数字
3层-CNN卷积神经网络预测MNIST数字 本文创建一个简单的三层卷积网络来预测 MNIST 数字.这个深层网络由两个带有 ReLU 和 maxpool 的卷积层以及两个全连接层组成. MNIST 由 ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...
随机推荐
- CenterNet
Objects as Points anchor-free系列的目标检测算法,只检测目标中心位置,无需采用NMS 1.主干网络 采用Hourglass Networks [1](还有resnet18 ...
- linux shell鼠标键盘快捷键
- 更新Navicat Premium 后打开数据库出现1146 - Table 'performance_schema.session_variables' doesn't exist
更新Navicat Premium 后打开数据库出现1146 - Table 'performance_schema.session_variables' doesn't exist 解决方法:打开终 ...
- Quartz(二)
1 SchedulerFactory 1.1 概述 Quartz是以模块的方式构建的,因为,要使它运行,几个组件必须很好的组合在一起.非常幸运的是,已经有了一些现存的助手可以完成这些工作. 所有Sch ...
- Redux 聊聊
前言 Redux 是 JavaScript 状态容器,提供可预测化的状态管理. 首先明确一点的就是: Redux并不是React必须的,也没有任何依赖,你可以很自由的将他应用到各种前端框架.jQuer ...
- java常用类与包装类--包装类
2.基本数据类型数据的包装类 局部变量中基本数据类型直接分配在栈中,而对象分配在堆中 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法来操作该数据 包装类主要功能:用于基本数据类型与字 ...
- centos7下open--v!(p/n)部署
一,client-server 路由模式 使用tun,openssl,lzo压缩,启用转发,生成证书,关闭selinux 同步下时间 #1安装 yum -y install openvpn easy- ...
- #381 Div2 Problem C Alyona and mex (思维 && 构造)
题意 : 题目的要求是构造出一个长度为 n 的数列, 构造条件是在接下来给出的 m 个子区间中, 要求每一个子区间的mex值最大, 然后在这 m 个子区间产生的mex值中取最小的输出, 并且输出构造出 ...
- 模板_LCA
// luogu-judger-enable-o2 #include<bits/stdc++.h> #define maxn 1000002 //#define int long long ...
- css了解一下!!!
css简介 css(cascading style sheet,层叠样式表):为了让网页的内容核样式拆分开; 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染); css语法 cs ...