第19章 可视化网络架构

第19章 可视化网络架构

我们还没有讨论的一个概念是架构可视化,即构建网络中节点和对应的连接的图表并且将该图表作为一副图像保存到磁盘的过程。图中的节点表示层,节点之间的连接表示数据通过网络的数据流。

在每层中这些图通常包括下述部件:

(1)输入卷大小;

(2)输出卷大小;

(3)可选的层的名字。

我们通常使用网络架构可视化,当(1)调试我们自己的自定义网络架构和(2)出版的时候,这时架构可视化要比源码以及涵盖同样信息的表格更加容易理解。在后续中,将看到如何使用keras构建架构可视化,且将它作为一副图保存到磁盘上。

1         架构可视化的重要性

可视化一个模型的架构是极其重要的一个调试工具,特别是:

(1)在出版物中实现一个架构,但是你对它不熟悉;

(2)实现你自己定义的网络架构。

简短的说,架构可视化验证我们的假设,即代码是否按照我们预定的想法在构建模型。通过检查该输出图,可以检查是否存在逻辑破绽。最常见的破绽包括:

(1)网络中不正确的层顺序;

(2)在一个CONV或POOL层后假设了一个不正确的输出卷大小。

无论什么时候实现一个网络架构的时候,我建议在CONV或POOL层的每一个块之后可视化网络架构,这将验证你的假设(更重要的是在网络早期发现错误)。

CNNs中的bug不像应用程序中由边界条件引起的其它逻辑bug一样。而是,一个CNN可能训练的很好而且即使在不正确的层顺序也获得了合理的结果,但是如果你不能意识到这种错误的发生,你可能报告你的结果认为你做了一件事,实际上你却做了另一件事。在后续中,我将帮助你可视化网络架构来避免这种有问题的情况。

1.1  安装graphviz和pydot

在ubuntu下直接sudo apt-get install graphviz即可安装graphviz包。安装完后需要安装python包:pip install graphviz、pip install pydot。

由于我自己在离线环境中,因此从https://pypi.org/网站下搜索graphviz和pydot,将python离线包下载到dl4cv虚拟环境下,然后解压,直接python set-up.py install即可安装。安装完毕,就可以使用该环境了。

1.2  可视化keras网络

在GitHub的chapter19/下执行文件python visualize_architecture.py即可在当前目录下生成lenet.png文件,该文件记录了网络流。

我们导入需要创建的网络架构以及可视化工具,然后构建模型,将模型可视化然后保存到文件中即可。

执行后的lenet.png即为实际的网络可视化图。打开后将看到下图:

图19.1/19.2 网络可视化架构图

如图19.1和19.2所示的即为MiniVGGNet架构图,架构中的每一个节点表示一层且连接到下一层,终止于softmax分类器。注意网络中的每一层是如何包含输入和输出大小的——这些值对应于卷进入该层和退出该层时空间维度的大小。

漫步在LeNet架构,可看到输入层接受一个为28×28×1的输入图像。该层的输入和输出尺寸是相同的,是由于该层仅是输入数据的占位符。

你可能奇怪数据尺寸(None, 28, 28, 1)中的None值,这个属性表示我们实际的batch size。当可视化网络架构时,keras不知道我们实际的batch size,因此置为None。在实际训练时,我们可以设置为32、64、128等等任意我们确实合适的batch size。

下一步,我们的数据进入第一个CONV层,该层在输入28×28×1上学习到20个核。第一个CONV的输出为28×28×20,由于使用了zero padding我们保留了最初的输入尺寸,但是通过学习20个核我们也改变了它的尺寸。

CONV层之后是激活层,按照定义该层不会改变输入卷大小。但是一个POOL层会改变输入卷大小,这里输入卷尺寸从28×28×20降为14×14×20。

第二个CONV层接受14×14×20的输入卷大小,但是通过学习50个核使得输出卷大小为14×14×50。然后经过激活层、POOL层后输出卷更改为7×7×50。

此时,我们应用FC层,为了完成它,7×7×50的输入变为2450的列表(因为7*7*50=2450)。既然我们将网络的卷积部分的输出flattened了,那么我们可以接受2450的输入大小且学习500个节点来应用FC层。然后跟着激活层,之后再应用另一个FC层,这次将500输入将为10(即我们MNIST数据集的类别标签的总数目)。

最后,一个softmax分类器将应用在这10个输出上,给出我们最终的类别概率。

2         总结

就像我们可以用代码表达LeNet架构,我们也可以用图来可视化模型本身。随着你开始深度学习的旅行,我强烈建议你使用这段代码来可视化任何你的网络架构,特别是在你不熟悉它的时候。确保你理解了网络中的数据流并且理解在CONV、POOL和FC层之后的卷大小是如何改变的,这将使你对架构有更深入的理解而不是仅依赖代码本身。

当实现我自己的网络架构的时候,随着我在实际编码的时候,我每2-3层块结构时,我就会可视化网络架构,确保我及早发现bug以及逻辑破绽。

原文地址:https://www.cnblogs.com/paladinzxl/p/9686041.html

时间: 2024-10-27 11:42:18

第19章 可视化网络架构的相关文章

第19章 网络通信----网络程序设计基础

网络程序设计是指编写与其他计算机进行通信的程序.Java已经将网络程序所需要的东西封装成不同的类.只要创建这些类的对象,使用相应的方法. 1.局域网与因特网 为了实现两台计算机的通信,必须要用一个网络线路连接两台计算机. 服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序,而网络用于连接服务器与客户机,实现两者相互通信.但有时在某个网络中很难将服务器与客户机区分开. 我们通常所说的局域网(Local Area Network,LAN),就是一群通过一定形式连接起来的计算机.它可以

RNN-RBM for music composition 网络架构及程序解读

RNN(recurrent  neural network)是神经网络的一种,主要用于时序数据的分析,预测,分类等. RNN的general介绍请见下一篇文章<Deep learning From Image to Sequence>.本文针对对deep learning有一点基础(神经网络基本training原理,RBM结构及原理,简单时序模型)的小伙伴讲一下Bengio一个工作(RNNRBM)的原理和实现. 本文重点内容:针对RNN(recurrent neural network)一个应

4.13日第12次作业,16章外包,17章需求,19章组织级与大型项目

29-高项-田哲琦 16章.外包管理 1.外包的形式有哪五种?什么是利益关系?P346-348 答:企业现行采用的主要外包形式如下: 1).活动外包 2).服务外包 3).内包 4).合包 5).利益关系. 利益关系(benfit-based relationship),这是一种长期合作关系,双方先为此关系进行投资,再根据预先拟定的协议分享利益,共同承担风险,同时共享利益. 2.外包管理的目标是什么?要实现这个目标,对外包管理提出哪四个方面的要求?P348 答:软件外包管理总的目标是用强有力的手

Openstack Liberty网络架构实现分析(一)

春节前在研究Openstack最新版本Liberty网络时,发现了一篇较好的介绍Liberty网络实现和一些新技术的文章.经过仔细研究后决定写写研究后的体会. 此系列文章分为7个部分,分别介绍: 1.Liberty网络总览 2.网络架构 3.Neutron配置 4.网络创建 5.添加路由.网络和子网 6.在租户网络启动虚机 7.在FLAT网络启动虚机 文章连接:OpenStack Liberty Neutron Deployment (Part 1-7 Overview) http://www.

深入理解openstack网络架构(1)

原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture 前言 openstack网络功能强大同时也相对更复杂.本系列文章通过Oracle OpenStack TechPreview介绍openstack的配置,通过各种场景和例子说明openstack各种不同的网络组件.本文的目的在于提供openstack网络架构的全景图并展示各个模块是如何一起协作的.这对openstack的初学者

Android技术19:Android系统架构

Android系统架构是学习Android最基本的知识点,经常在技术面试过程中涉及到有关问题,接下来对Android系统架构进行总结. Android官方文档提供资料显示:Android系统分为4个层次,从低到高依次为Linux kernel(Linux内核层),Libraries和Android运行时Runtime,Android Framework,Applications. 1.Applications应用层 该层主要是运行在Andorid系统上的应用程序,如Home,SMS,Contac

图解服务器端网络架构

这篇是计算机类的优质首发推荐>>>><图解服务器端网络架构> 467张图表讲透构建高可用高性能服务器实战 写给网络架构师 服务器工程师的网络服务器搭建架设管理配置宝典 编辑推荐 467张图表讲透基础技术和设计要点 资深工程师撰写,网络和服务器的首次完美结合 从实际架构经验出发,为你讲述最接地气的技术 内容简介 <图解服务器端网络架构>以图配文,详细说明了服务器端网络架构的基础技术和设计要点.基础设计是服务器端网络架构最重要的一个阶段.本书就立足于基础设计的设

关于nspm品类产品在行业用户网络架构中的研究分析(建议安全自动化运维工具开发者,了解)

为配合NSPM产品在不同行业不同类型的网络架构中最大限度的发挥产品优势,探索不同网络架构中对产品的适配性.分多个行业目前的传统网络架构与未来演进的架构进行深入调研. 从目前数据中心所使用协议的数据层上看,IT方案都是以二/三层网络(例如以太网+IP网络)为基础的,例如GRE.VXLAN等等,其解决和设计方案就是为了解决现有网络的缺陷和不足,为某一个特定问题而设计的.而现有的二/三层网络本质问题并没有得到有效的解决,网络潜在的资源并未得到有效的利用,安全问题也并有效的管理和抑制.以下我们对不同行业

【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识

第2章        嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等. 2.1   初学者重要提示 2.2   TCP/IP协议栈简介 2.3   TCP/IP参考模型 2.4   OSI参考模型 2.5   RL-TCPnet和参考模型的对应关系 2.6   网络协议收录文件RFC 2.7   以太网和IEEE 802.3 2.8   网线相关知识 2.9   总