在Deep Learning中有不同类型的网络结构,不同的网络有不同的应用范围,这些都是与其结构和设计思路相关的。
最常见的网络之一是CNN(Convolutional Neural Network), 在最近几年席卷计算机视觉等相关领域,因为他强大的特征表述能力和对图像处理的得天独厚优势,CNN的设计和训练也是被研究讨论最多的一个话题。

题主提到深度网络中层结构的设计和layer中节点个数的确定,我在这里姑且以CNN的网络结构设计为例讨论。
首先有一些常识知识是在设计一个CNN时需要知道的,我先简单介绍一下cnn的两三种基本操作:
CNN网络中几种基本网络层结构包括:

  • Convolutional Layer(卷积层)

Convolutional Layer对该层输入数据所做的操作其实是这样的:


如上图,左侧绿色的假设为该层的输入(你可以想象成一个输入的图片),我们假设在这里他的输入size为 W=6, H=6, D=1,代表输入的数据的三个维度粉分别是6,6,1(图像数据如rgb格式图像为3层结构,
所以会有3channel的数据,D就可能为不止1)
红色区域的为一次卷积操作的region,他会与一个为3*3的权值矩阵做点乘然后做加和映射到一个数值上,他的过程类似于下图:

要注意的一点是,权值矩阵我这里没有画出来,而且权值矩阵在这里我们称他为filters,一层convolutional layer通常是会有多个filters的,原因是在初始化权值矩阵中的权值的时候,我们通常是采用随机生成的办法产生parameters(基于某些特定的分布),越多的parameters显然会让该层网络有更强大的数据表达能力,但是同时会让网络的训练更慢,代价更大。

Pooling Layers
Pooling层做的事情的目的其实可以这么理解,这么大的3维矩阵放入计算,后面在training阶段还要算梯度来做优化求解参数,小的图像数据还好,如果是一个医学图像,一言不合就 3000*3000 ,再来一个20层的网络结构,当然没法训练。所以我们要想办法让这个数据变小一些,不然所有的模型太难训练都是空谈了。
Pooling 的想法很简答,把例如,我把一个3*3的区域拿出来,只用这9个点中的最大值来代替这个区域的值就好了,这就是max pooling层。与此类似,我们还有均值pooling等等。
下面的图应该很好理解pooling:

<img src="https://pic4.zhimg.com/50/e75b9be2ca05ac9974a7ff1c10ee9676_hd.jpg" data-rawwidth="514" data-rawheight="406" class="origin_image zh-lightbox-thumb" width="514" data-original="https://pic4.zhimg.com/e75b9be2ca05ac9974a7ff1c10ee9676_r.jpg"> 这个图把pooling操作成为downsampling,中文很多人翻译成下采样,其实就是指的只保留的一部分的图像数据,那么有人可能就会有疑问了,这么做不是会丢失很多图像数据吗?
答案是这个的疑问是非常有道理的,在一些简单的图像分类问题上,丢失一些数据不算什么,我仍然能正确的识别分类,但是在一些segmentation的问题上,尤其是在医学图像要求比较严谨的结果的大前提下,这么丢失数据是不妥的,也会导致不准确的segmentation的出现。有一些手段可以解决这个问题,包括将原始图像和他合并来恢复丢失数据等,这些如果你感兴趣可以看看这篇文章:
Von Eicken, Thorsten, et al. "U-Net: A user-level network interface for parallel and distributed computing." ACM SIGOPS Operating Systems Review. Vol. 29. No. 5. ACM, 1995.

还有多的不同操作包括
Fully-connected layer
Normalization Layer
我就不啰嗦展开介绍了,你可以参看
CS231n Convolutional Neural Networks for Visual Recognition
或者
LeCun, Yann, Koray Kavukcuoglu, and Clément Farabet. "Convolutional networks and applications in vision." ISCAS. 2010.
的具体介绍,讲的非常仔细

好吧我还是啰嗦了,一大早没什么状态码代码就打打字活动筋骨了。。- -!!

回到题主的问题,在设计一个cnn的时候层数和每层nodes的个数怎么确定呢?
先说层数,答案是看数据来决定,有可能你根本就不需要多层结构,一个输入输出层就够了,这就一个线性模型。

层数越多的网络,对数据的表达能力也越强这是好理解的,但是显然并不是层数越多越好,一个是训练成本增加,一个也是如果你的训练数据不够多,你根本就不能training一个这么多层数的网络,这对nodes数也是一样的道理。
但是layers的层数在数据足够多足够hold住的情况下,多加一些不会有什么坏处,至于最多的层数有多少,我这里有一些层数非常深的例子:
1. GoogleNet-22层


GoogleNet是用于image recognition 和 Detection的,他的数据是ImageNetLarge-Scale Visual Recognition Challenge 2014(ILSVRC14).

2. ResNet, 152 layers
“Deep Residual Learning for Image Recognition”
这个网络让它们获得ILSVRC & COCO 2015 competitions的第一名,包括ImageNet detection, ImageNet localization, COCO detection, and COCO segmentation.
所以网络深一些并没有什么坏处。。。。只要你的数据hold的住,机子跑的动,结构要合理。

但是每层节点的个数就不能越多越好了。
Hinton有一个文章叫做:
‘A Practical Guide to TrainingRestricted Boltzmann MachinesVersion 1Geoffrey HintonDepartment of Computer Science, University of Toronto’
有聊到一些design和training的一些基本原则和操作。
我大概摘取其中一些总结概括一下:

然后我想介绍一下一两个比较成功的网络结构的设计思路,参考它们的想法我们也能大概做出比较合适自己数据的结构和层数。
一个叫做U-Net ,一个叫做Fully Convolutional Networks


deep learning中网络的层数和每层的节点数是如何确定的?相关推荐

  1. Deep Learning 中的 benchmark 与 baseline

    Deep Learning 中的 benchmark 与 baseline benchmark benchmark是一个参考点,通常指一个数据集或一系列标准化的测试任务,用于评估模型的性能.bench ...

  2. 详述Deep Learning中的各种卷积(二)

    作者:Redflashing 本文梳理举例总结深度学习中所遇到的各种卷积,帮助大家更为深刻理解和构建卷积神经网络. 本文将详细介绍以下卷积概念: 2D卷积(2D Convolution) 3D卷积(3 ...

  3. Deep Learning中如何选择GPU?(一)

    作者:Redflashing 文中图片均来自于NVIDIA官方文档或NVIDIA社区博客 深度学习通常需要大规模的计算需求,作为主要运算硬件的GPU的选择决定了深度学习的体验.但是如何去选择新的GPU ...

  4. A guide to convolution arithmetic for deep learning中译版

    最近学习CNN(卷积神经网络),导师推荐阅读一篇论文<A guide to convolution arithmetic for deep learning>,论文链接:arXiv.org ...

  5. [深度学习-总结]Deep learning中8大模型介绍与比较(LeNet5,AlexNet,VGG,Inception,MobileNets,ResNet,DenseNet,Senet)

    深度学习 9中模型介绍与比较 0. CNN 结构演化 1. LeNet5 2. AlexNet 3. VGG 为什么使用2个3x3卷积核可以来代替5*5卷积核 4. 1*1卷积 5. Inceptio ...

  6. 干货|(DL~3)deep learning中一些层的介绍

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 简介 一.relu层 1.前向传播 2.反向传播 二.dropou ...

  7. pytorch获取网络的层数和每层的名字

    #创建自己的网络 import models model = models.__dict__["resnet50"](pretrained=True)for index ,(nam ...

  8. 笔记 | 吴恩达Coursera Deep Learning学习笔记

    向AI转型的程序员都关注了这个号☝☝☝ 作者:Lisa Song 微软总部云智能高级数据科学家,现居西雅图.具有多年机器学习和深度学习的应用经验,熟悉各种业务场景下机器学习和人工智能产品的需求分析.架 ...

  9. Deep Learning and Shallow Learning

    由于 Deep Learning 现在如火如荼的势头,在各种领域逐渐占据 state-of-the-art 的地位,上个学期在一门课的 project 中见识过了 deep learning 的效果, ...

最新文章

  1. 0x03.基本算法 — 前缀和与差分
  2. R语言笔记6:在R中写一些简单的函数、functions基础和作用域
  3. BeanShell增强的FOR循环
  4. 2014-11-18--Hadoop的基础学习(五)--编写不同MapReudce程序及其特性(下)
  5. 权限控制框架Shiro简单介绍及配置实例
  6. 130 道 Kubernetes + Docker + DevOps 大厂面试题及知识点详解
  7. 汉字转拼音(VB版)
  8. 最全的BAT大厂面试题整理,系列篇
  9. java569_java如何实现这样一个程序
  10. ie浏览器修复_IE 11浏览器被爆严重漏洞,Windows系统均有中招风险!
  11. 如果你用GitHub,可以这样提高效率
  12. conda clean -i
  13. 生产计划管理系统实现生产计划流程完美结合
  14. compositionstart、compositionend事件屏蔽拼音状态
  15. mongodb errmsg : not master and slaveOk=false的解决办法
  16. 编译原理 正则表达式_确定有穷自动机(DFA)_化简(最小化)
  17. 如何用软件测试固态颗粒,【英睿达 BX500固态硬盘使用总结】颗粒|读写速度|写入测试|建议_摘要频道_什么值得买...
  18. 英国和中国的时差是多
  19. 驾驭你的“职场布朗运动” (作者李云)
  20. 第九十六章 SQL函数 MOD

热门文章

  1. 部编版是什么版本_部编版教材和人教版教材的区别
  2. composer 学习
  3. M301H_JL九联-Hi3798MV300-当贝纯净桌面-卡刷固件包
  4. Ardunio开发——水泵操作过程
  5. 开源Flash游戏引擎
  6. ANSYS APDL中的压电分析
  7. linux dns无法解析,Linux服务器内部无法解析域名
  8. Note: Time clocks and the ordering of events in a distributed system
  9. Qt项目开发实例 (含源码)
  10. 红帽RHCE培训-课程1笔记内容