当前位置: 首页 > news >正文

CNN网络的一些基本知识

CNN 网络的layer介绍

在卷积神经网络(Convolutional Neural Network,CNN)中,往往包含许多种不同的网络层交替组成,主要有卷积层(Convolutional Layer)、池化层(Pooling Layer)、非线性层(ReLU Layer)、全连接层(Fully Connected Layer)等。

  • 卷积层:卷积函数层, 主要对输入input进行卷积操作,同时根据参数stride的设置,确定卷积核每两次卷积操作直接滑动的距离。卷积核(kernel)类似一个图像滤波器(filter),每一个卷积核用一个矩阵表示,将其在图片上按照间隔大小滑动处理一遍得到的结果,即为卷积层的activation map(或feature map)

  •  ReLU(Rectified Linear Units) Layers:非线性层,主要目的是在系统中引入非线性特征。最常见的CNN网络中使用ReLU层,其具有比tanh和sigmoid函数更好的速度与效率;
  • Pooling Layers:池化层,也称降采样层,最常见的是maxpooling方法。Pooling层对输入矩阵的一块区域整体进行操作,只在该区域保留一个数值,而不同的pooling方法决定该数值的计算方法,maxpooling层对于一个区域输出最大值,同时还有average pooling和L2-norm pooling等方式。
  • Fully Connected Layer:全连接层,一般位于CNN网络的最后部分,该层的输入可以是卷积层,ReLU层,Pooling层的结果,输出一个N维向量,N即为要识别的类别数。

  • Dropout layer:由大牛Hinton提出的Dropout Layers,是为了防止过度拟合问题出现,在训练时专门加入的层。该层在forward过程中随机drop out一系列的激活值,将其值改成0,减少过度拟合。

  • backpropagation:“反向传播”,是一种在神经网络中常用的学习算法,用于计算梯度(gradient)以优化网络的权重和偏置,可以分为4个部分,the forward pass, the loss function, the backward pass, and the weight update.

  • backward pass:其目的是确定哪些权重对损失贡献最大,并找到调整这些权重的方法以便减少损失;

CNN 如何选取layer

cnn 卷积核大小、卷积层数、每层map个数都是如何确定下来的呢? 每一层卷积有多少channel数,以及一共有多少层卷积,这些暂时没有理论支撑。

一般通过经验,先用大模型训练,然后再在大模型上简化,最后取性能、精确度等综合的tradeoff.

经验模式:

  1. 小数据量,大模型训练;
  2. 设计合理的loss函数。一般来说分类就是Softmax, 回归就是L2的loss
  3. 观察loss的变化情况:NN主要的优化目标就是loss,所以观察loss比只观察准确率好
  4. 确认NN学习充分:比如分类,判断准确率会移动到极值附近;
  5. 设置合理的learn rate
  6. 对比训练集和测试集的loss

具体操作:

  1. 预处理:mean/std zero-center就够了, PCA, 白化什么的都用不上. 反正CNN能学习encoder;
  2. shuffle很重要;
  3. 理解网络原理
  4. dropout,可以防止过拟合
  5. 无脑用ReLU
  6. 无脑用3x3
  7. filter数量2^n
  8. 使用Xavier初始化网络,Xavier初始化的核心思想是使得每一层神经网络的激活值的方差在前向传播时保持恒定。这有助于解决梯度消失或爆炸的问题。
  9. 无脑用sgd + momentum.
  10. 要鼓励使用batch normalization.
  11. 你有95%概率不会使用超过40层的模型;
# 举一个filter数量是2^n的例子filters = [32, 64, 128]  # 这些是2的5次方,6次方,7次方self.conv_layers = nn.Sequential(nn.Conv2d(in_channels=3, out_channels=filters[0], kernel_size=3, stride=1, padding=1),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2),nn.Conv2d(in_channels=filters[0], out_channels=filters[1], kernel_size=3, stride=1, padding=1),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2),nn.Conv2d(in_channels=filters[1], out_channels=filters[2], kernel_size=3, stride=1, padding=1),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2))

参考:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 代码随想录算法训练营day58:图论08:拓扑排序精讲;dijkstra(朴素版)精讲
  • [C++进阶]map和set的相关题目
  • 数据结构-c/c++实现栈(详解,栈容量可以动态增长)
  • MySQL——基础操作
  • 【Unity】简单机甲运动系统——坦克式操控方式
  • 房产报备小程序房产报备系统源码搭建方案
  • GPT-SoVITS-WebUI 初体验
  • 专栏引言:迈向大数据分析的最前沿
  • Java 单元测试指南
  • Nginx IP 哈希负载均衡配置:实现请求智能分发
  • WebForms DataList 控件深入解析
  • Vulnhub靶场 | DC系列 - DC7
  • Vue3安装Element Plus
  • 怎样通过bs4找出程序中 标签<div class=“List2“>中所有的<li>的内容?
  • 【计算机网络】计算机网络的性能指标
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Debian下无root权限使用Python访问Oracle
  • DOM的那些事
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Just for fun——迅速写完快速排序
  • Linux下的乱码问题
  • Median of Two Sorted Arrays
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue自定义指令实现v-tap插件
  • windows下mongoDB的环境配置
  • 阿里云购买磁盘后挂载
  • 从零开始学习部署
  • 分布式事物理论与实践
  • 基于webpack 的 vue 多页架构
  • 解析带emoji和链接的聊天系统消息
  • 前端之React实战:创建跨平台的项目架构
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 事件委托的小应用
  • 手机端车牌号码键盘的vue组件
  • 算法---两个栈实现一个队列
  • 我的面试准备过程--容器(更新中)
  • 写给高年级小学生看的《Bash 指南》
  • 学习HTTP相关知识笔记
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ![CDATA[ ]] 是什么东东
  • # dbt source dbt source freshness命令详解
  • # 数论-逆元
  • #1014 : Trie树
  • #define、const、typedef的差别
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $.each()与$(selector).each()
  • (160)时序收敛--->(10)时序收敛十
  • (6)添加vue-cookie
  • (8)STL算法之替换
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (回溯) LeetCode 77. 组合
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件