网络架构分析(网络架构分析论文)

网络设计 877
今天给各位分享网络架构分析的知识,其中也会对网络架构分析论文进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、什么是网站架构 2、

今天给各位分享网络架构分析的知识,其中也会对网络架构分析论文进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

什么是网站架构

网站架构,一般认为是根据客户需求分析的结果,准确定位网站目标群体,设定网站整体架构,规划、设计网站栏目及其内容,制定网站开发流程及顺序,以最大限度地进行高效***分配与管理的设计。其内容有程序架构,呈现架构,和信息架构三种表现。而步骤主要分为硬架构和软架构两步程序。网络架构是现代网络学习和发展的一个必须的基础技术。

中文名

网站架构

一般认为

根据客户需求分析的结果

制定

网站开发流程及顺序

内容

程序架构,呈现架构

快速

导航

软架构八个方案

硬架构

机房的选择

在选择机房的时候,根据网站用户的地域分布,可以选择网通或电信机房,但更多时候,可能双线机房才是合适的。越大的城市,机房价格越贵,从成本的角度看可以在一些中小城市托管服务器,比如说北京的公司可以考虑把服务器托管在天津,廊坊等地,不是特别远,但是价格会便宜很多。

带宽的大小

通常老板花钱请我们架构网站的时候,会给我们提出一些目标,诸如网站每天要能承受100万PV的访问量等等。这时我们要预算一下大概需要多大的带宽,计算带宽大小主要涉及两个指标(峰值流量和页面大小),我们不妨在计算前先做出必要的***设:

第一:***设峰值流量是平均流量的5倍。

第二:***设每次访问平均的页面大小是100K字节左右。

如果100万PV的访问量在一天内平均分布的话,折合到每秒大约12次访问,如果按平均每次访问页面的大小是100K字节左右计算的话,这12次访问总计大约就是1200K字节,字节的单位是Byte,而带宽的单位是bit,它们之间的关系是1Byte = 8bit,所以1200K Byte大致就相当于9600K bit,也就是9Mbps的样子,实际情况中,我们的网站必须能在峰值流量时保持正常访问,所以按照***设的峰值流量算,真实带宽的需求应该在45Mbps 左右。

当然,这个结论是建立在前面提到的两点***设的基础上,如果你的实际情况和这两点***设有出入,那么结果也会有差别。

服务器的划分

先看我们都需要哪些服务器:图片服务器,页面服务器,数据库服务器,应用服务器,日志服务器等等。

对于访问量大点的网站而言,分离单独的图片服务器和页面服务器相当必要,我们可以用lig***d来跑图片服务器,用apache来跑页面服务器,当然也可以选择别的,甚至,我们可以扩展成很多台图片服务器和很多台页面服务器,并设置相关域名,如img.domain和 ,页面里的图片路径都使用绝对路径,如img src="" /,然后设置DNS轮循,达到最初级的负载均衡。当然,服务器多了就不可避免的涉及一个同步的问题,这个可以使用rsync软件来搞定。

数据库服务器是重中之重,因为网站的瓶颈问题十有八九是出在数据库身上。一般的中小网站多使用MySQL数据库,不过它的集群功能似乎还没有达到stable的阶段,所以这里不做评价。一般而言,使用MySQL数据库的时候,我们应该搞一个主从(一主多从)结构,主数据库服务器使用innodb表结构,从数据服务器使用myisam表结构,充分发挥它们各自的优势,而且这样的主从结构分离了读写操作,降低了读操作的压力,甚至我们还可以设定一个专门的从服务器做备份服务器,方便备份。不然如果你只有一台主服务器,在大数据量的情况下,mysqldump基本就没戏了,直接拷贝数据文件的话,还得先停止数据库服务再拷贝,否则备份文件会出错。但对于很多网站而言,即使数据库服务仅停止了一秒也是不可接受的。如果你有了一台从数据库服务器,在备份数据的时候,可以先停止服务(sl***e stop)再备份,再启动服务(sl***e start)后从服务器会自动从主服务器同步数据,一切都没有影响。但是主从结构也是有致命缺点的,那就是主从结构只是降低了读操作的压力,却不能降低写操作的压力。

为了适应更大的规模,可能只剩下最后这招了:横向/纵向分割数据库。所谓横向分割数据库,就是把不同的表保存到不同的数据库服务器上,比如说 用户表保存在A数据库服务器上,文章表保存在B数据库服务器上,当然这样的分割是有代价的,最基本的就是你没法进行LEFT JOIN之类的操作了。所谓纵向分割数据库,一般是指按照用户标识(user_id)等来划分数据存储的服务器,比如说:我们有5台数据库服务器,那么 “user_id % 5 + 1”等于1的就保存到1号服务器,等于2的就保存到2号服务器,以此类推,纵向分隔的原则有很多种,可以视情况选择。不过和横向分割数据库一样,纵向分割数据库也是有代价的,最基本的就是我们在进行如COUNT, SUM等汇总操作的时候会麻烦很多。综上所述,数据库服务器的解决方案一般视情况往往是一个混合的方案,以其发挥各种方案的优势,有时候还需要借助memcached之类的第三方软件,以便适应更大访问量的要求。

如果有专门的应用服务器来跑PHP脚本是最合适不过的了,那样我们的页面服务器只保存静态页面就可以了,可以给应用服务器设置一些诸如***.domain之类的域名来和页面服务器加以区别。对于应用服务器,我还是更倾向于使用prefork模式的apache,配上必要的xcache之类的PHP缓存软件,加载模块要越少越好,除了mod_rewrite等必要的模块,不必要的东西统统舍弃,尽量减少***d进程的内存消耗,而那些图片服务器,页面服务器等静态内容就可以使用lig***d或者tux来搞,充分发挥各种服务器的特点。

如果条件允许,独立的日志服务器也是必要的,一般小网站的做法都是把页面服务器和日志服务器合二为一了,在凌晨访问量不大的时候cron运行前一天的日志计算,不过如果你使用awstats之类的日志分析软件,对于百万级访问量而言,即使按天归档,也会消耗很多时间和服务器***去计算,所以分离单独的日志服务器还是有好处的,这样不会影响正式服务器的工作状态。

软架构

框架的选择

PHP框架有很多选择,比如:CakePHP,Symfony,Zend Framework等等,至于应该使用哪一个并没有唯一的答案,要根据Team里团队成员对各个框架的了解程度而定。很多时候,即使没有使用框架,一样能 写出好的程序来,比如Flickr据说就是用Pear+Smarty这样的类库写出来的,所以,是否用框架,用什么框架,一般不是最重要的,重要的是我们 的编程思想里要有框架的意识。

逻辑的分层

企业网络架构规划应从哪几方面着手

企业总体架构包括:企业战略、业务架构、技术架构、应用架构、基础设施、信息架构、信息安全和IT管理这8个方面。其中: 信息架构包括数据实体及数据的交换和流动,它用来保证数据有效的共享和交换,包括数据的***集、存储、发布和传输。 IT管理就是要求设计的企业网络架构必需安全、可控和可管理。 因此,规划企业的总体架构要基于系统的现状和企业的业务发展策略。从企业当前和将来的应用出发,先深入了解自己的商务和IT战略,彻底了解企业的当前期望,并制定高标准的商业流程图与可行性方案。随后深入了解企业当前信息系统的现状,对企业的业务系统进行仔细的分析,梳理企业网络当前存在的问题,总结归纳企业当前的实际需求,将信息系统与业务系统充分融合起来思考,最后设计出一个能提升整个网络应用平台的整合性、安全、可靠、稳定、可控和易用的企业总体网络架构解决方案。 实际上,对于一个网络应用规模较大的企业网络架构来说,还必需遵从分层的设计理论,按信息化应用的重要程度,将它们划分为多个层次,并按具体的实施时间依次分段实现。但是,在设计和实现时,必需考虑到每一层的融合问题。 另外,在规划和设计企业总体网络架构时,还需要注意下列这些方面: (1)、坚持从企业应用为最基本的出发点。 (2)、设计时应当将企业当前和各类应用和将来会上的应用都必需全部考虑进来,特别是要为企业业务的扩展留下足够的带宽和可扩展的空间。这些方面直接关系到企业网络架构中各类网络设备(如路由器、交换机、安全***、服务器等)的***购决策,以及决定企业互联网总出口带宽的大小和企业网络的最终拓扑及规模。 (3)、在设计时,应当从全局出发,特别是集团性质的企业,其下属有多个分支机构,在设计企业总体网络架构时,就必需将所有的分支机构的各种应用都考虑进来。但是,在设计时,可以按分区的方式,先分别设计每个分支机构的网络架构,然后再将它们整合到企业的总体网络架构中来。 (4)、设计的企业总体架构必需考虑到企业可以在这方面允许投入的最大成本。并且,在同样成本投入的情况,要尽量设计一个可控、可管、安全、经济节能、绿色环保,以及稳定可靠、高性能的网络架构。也就是说,不能由于投入的资金不够就可以勉强着来,宁可分步实施,也不能如此。还有就是在设计时,要尽量为企业缩减相关投入成本,不论是在经济危机时期,还是在经济形势大好之时都应该如此。 (5)、设计的企业网络总体架构应当具有可行性,应当能够得到企业领导的大力支持。 (6)、设计的企业网络总体架构应当具有很高的灵活性和可扩展性,可以随意增加或缩减单元。 (7)、设计企业总体网络架构时,还应当考虑企业当前的技术条件是否满足对网络进行可控和可管理的要求。 (8)、另外,在设计和规划企业网络总体架构时,尽量考虑一些能够缩减企业投入成本,又能保证网络应用性能的技术和方法。例如虚拟化技术、SAN和NAS存储方式、SAAS和整合理论等。 (9)、对于一些属于某些法规法案中约束的企业,在设计时还必需将这些法规法案的遵从考虑进去。例如,在美国上市的企业就必需遵守其发布的萨班斯法案。 另外,在设计时,还可以借助一些有效的工具来帮忙,将会达到事半功倍的效果,例如一些IT子网划分工具,项目管理软件、做文档记录、拓扑生成、网络协议分析软件、网络弱点检测工具等。 不过,有时尽管我们按企业的实际需求进行有效的网络规划和设计,但是,设计出来的网络总体架构在具体实施时,总是会遇到一些很现实方面的问题。例如,一些设备厂商当前没有设计方案中的设备;或者企业中一些老员工对新方案有所抵触,领导突然改变主意;或者企业突然遇到某种重要问题,资金突然吃紧等等。此时,我们将不能按原定设计方案去实现,就只能根据现实情况做出相应的调整了。

几种经典的网络服务器架构模型的分析与比较

相比于传统的网络编程方式,***驱动能够极大的降低***占用,增大服务接待能力,并提高网络传输效率。 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代码的陈列与分析,而侧重模型的介绍和比较。使用 libev ***驱动库的服务器模型将给出实现代码。 本文涉及到线程 / 时间图例,只为表明线程在各个 IO 上确实存在阻塞时延,但并不保证时延比例的正确性和 IO 执行先后的正确性;另外,本文所提及到的接口也只是笔者熟悉的 Unix/Linux 接口,并未推荐 Windows 接口,读者可以自行查阅对应的 Windows 接口。阻塞型的网络编程接口几乎所有的程序员第一次接触到的网络编程都是从 listen()、send()、recv()等接口开始的。使用这些接口可以很方便的构建服务器 /客户机的模型。我们***设希望建立一个简单的服务器程序,实现向单个客户机提供类似于“一问一答”的内容服务。图1. 简单的一问一答的服务器 /客户机模型 我们注意到,大部分的 socket接口都是阻塞型的。所谓阻塞型接口是指系统调用(一般是 IO接口)不返回调用结果并让当前线程一直阻塞,只有当该系统调用获得结果或者超时出错时才返回。实际上,除非特别指定,几乎所有的 IO接口 (包括 socket 接口 )都是阻塞型的。这给网络编程带来了一个很大的问题,如在调用 send()的同时,线程将被阻塞,在此期间,线程将无法执行任何运算或响应任何的网络请求。这给多客户机、多业务逻辑的网络编程带来了挑战。这时,很多程序员可能会选择多线程的方式来解决这个问题。多线程服务器程序 应对多客户机的网络应用,最简单的解决方式是在服务器端使用多线程(或多进程)。多线程(或多进程)的目的是让每个连接都拥有独立的线程(或进程),这样任何一个连接的阻塞都不会影响其他的连接。 具体使用多进程还是多线程,并没有一个特定的模式。传统意义上,进程的开销要远远大于线程,所以,如果需要同时为较多的客户机提供服务,则不推荐使用多进程;如果单个服务执行体需要消耗较多的 CPU ***,譬如需要进行大规模或长时间的数据运算或文件访问,则进程较为安全。通常,使用 pthread_create () 创建新线程,fork() 创建新进程。 我们***设对上述的服务器 / 客户机模型,提出更高的要求,即让服务器同时为多个客户机提供一问一答的服务。于是有了如下的模型。图2. 多线程服务器模型 在上述的线程 / 时间图例中,主线程持续等待客户端的连接请求,如果有连接,则创建新线程,并在新线程中提供为前例同样的问答服务。 很多初学者可能不明白为何一个 socket 可以 accept 多次。实际上,socket 的设计者可能特意为多客户机的情况留下了伏笔,让 accept() 能够返回一个新的 socket。下面是 accept 接口的原型: int accept(int s, struct sockaddr *addr, socklen_t *addrlen); 输入参数 s 是从 socket(),bind() 和 listen() 中沿用下来的 socket 句柄值。执行完 bind() 和 listen() 后,操作系统已经开始在指定的端口处监听所有的连接请求,如果有请求,则将该连接请求加入请求队列。调用 accept() 接口正是从 socket s 的请求队列抽取第一个连接信息,创建一个与 s 同类的新的 socket 返回句柄。新的 socket 句柄即是后续 read() 和 recv() 的输入参数。如果请求队列当前没有请求,则 accept() 将进入阻塞状态直到有请求进入队列。 上述多线程的服务器模型似乎完美的解决了为多个客户机提供问答服务的要求,但其实并不尽然。如果要同时响应成百上千路的连接请求,则无论多线程还是多进程都会严重占据系统***,降低系统对外界响应效率,而线程与进程本身也更容易进入***死状态。 很多程序员可能会考虑使用“线程池”或“连接池”。“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务。“连接池”维持连接的缓存池,尽量重用已有的连接、减少创建和关闭连接的频率。这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如 websphere、tomcat 和各种数据库等。 但是,“线程池”和“连接池”技术也只是在一定程度上缓解了频繁调用 IO 接口带来的***占用。而且,所谓“池”始终有其上限,当请求大大超过上限时,“池”构成的系统对外界的响应并不比没有池的时候效果好多少。所以使用“池”必须考虑其面临的响应规模,并根据响应规模调整“池”的大小。 对应上例中的所面临的可能同时出现的上千甚至上万次的客户端请求,“线程池”或“连接池”或许可以缓解部分压力,但是不能解决所有问题。 总之,多线程模型可以方便高效的解决小规模的服务请求,但面对大规模的服务请求,多线程模型并不是最佳方案。下一章我们将讨论用非阻塞接口来尝试解决这个问题。使用select()接口的基于***驱动的服务器模型 大部分 Unix/Linux 都支持 select 函数,该函数用于探测多个文件句柄的状态变化。下面给出 select 接口的原型: FD_ZERO(int fd, fd_set* fds) FD_SET(int fd, fd_set* fds) FD_ISSET(int fd, fd_set* fds) FD_CLR(int fd, fd_set* fds) int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) 这里,fd_set 类型可以简单的理解为按 bit 位标记句柄的队列,例如要在某 fd_set 中标记一个值为 16 的句柄,则该 fd_set 的第 16 个 bit 位被标记为 1。具体的置位、验证可使用 FD_SET、FD_ISSET 等宏实现。在 select() 函数中,readfds、writefds 和 exceptfds 同时作为输入参数和输出参数。如果输入的 readfds 标记了 16 号句柄,则 select() 将检测 16 号句柄是否可读。在 select() 返回后,可以通过检查 readfds 有否标记 16 号句柄,来判断该“可读”***是否发生。另外,用户可以设置 timeout 时间。 下面将重新模拟上例中从多个客户端接收数据的模型。图4.使用select()的接收数据模型 上述模型只是描述了使用 select() 接口同时从多个客户端接收数据的过程;由于 select() 接口可以同时对多个句柄进行读状态、写状态和错误状态的探测,所以可以很容易构建为多个客户端提供独立问答服务的服务器系统。图5.使用select()接口的基于***驱动的服务器模型 这里需要指出的是,客户端的一个 connect() 操作,将在服务器端激发一个“可读***”,所以 select() 也能探测来自客户端的 connect() 行为。 上述模型中,最关键的地方是如何动态维护 select() 的三个参数 readfds、writefds 和 exceptfds。作为输入参数,readfds 应该标记所有的需要探测的“可读***”的句柄,其中永远包括那个探测 connect() 的那个“母”句柄;同时,writefds 和 exceptfds 应该标记所有需要探测的“可写***”和“错误***”的句柄 ( 使用 FD_SET() 标记 )。 作为输出参数,readfds、writefds 和 exceptfds 中的保存了 select() 捕捉到的所有***的句柄值。程序员需要检查的所有的标记位 ( 使用 FD_ISSET() 检查 ),以确定到底哪些句柄发生了***。 上述模型主要模拟的是“一问一答”的服务流程,所以,如果 select() 发现某句柄捕捉到了“可读***”,服务器程序应及时做 recv() 操作,并根据接收到的数据准备好待发送数据,并将对应的句柄值加入 writefds,准备下一次的“可写***”的 select() 探测。同样,如果 select() 发现某句柄捕捉到“可写***”,则程序应及时做 send() 操作,并准备好下一次的“可读***”探测准备。下图描述的是上述模型中的一个执行周期。图6. 一个执行周期 这种模型的特征在于每一个执行周期都会探测一次或一组***,一个特定的***会触发某个特定的响应。我们可以将这种模型归类为“***驱动模型”。 相比其他模型,使用 select() 的***驱动模型只用单线程(进程)执行,占用***少,不消耗太多 CPU,同时能够为多客户端提供服务。如果试图建立一个简单的***驱动的服务器程序,这个模型有一定的参考价值。 但这个模型依旧有着很多问题。 首先,select() 接口并不是实现“***驱动”的最好选择。因为当需要探测的句柄值较大时,select() 接口本身需要消耗大量时间去轮询各个句柄。很多操作系统提供了更为高效的接口,如 linux 提供了 epoll,BSD 提供了 kqueue,Solaris 提供了 /dev/poll …。如果需要实现更高效的服务器程序,类似 epoll 这样的接口更被推荐。遗憾的是不同的操作系统特供的 epoll 接口有很大差异,所以使用类似于 epoll 的接口实现具有较好跨平台能力的服务器会比较困难。 其次,该模型将***探测和***响应夹杂在一起,一旦***响应的执行体庞大,则对整个模型是灾难性的。如下例,庞大的执行体 1 的将直接导致响应*** 2 的执行体迟迟得不到执行,并在很大程度上降低了***探测的及时性。图7. 庞大的执行体对使用select()的***驱动模型的影响 ***的是,有很多高效的***驱动库可以屏蔽上述的困难,常见的***驱动库有 libevent 库,还有作为 libevent 替代者的 libev 库。这些库会根据操作系统的特点选择最合适的***探测接口,并且加入了信号 (signal) 等技术以支持异步响应,这使得这些库成为构建***驱动模型的不二选择。下章将介绍如何使用 libev 库替换 select 或 epoll 接口,实现高效稳定的服务器模型。使用***驱动库libev的服务器模型 Libev 是一种高性能***循环 / ***驱动库。作为 libevent 的替代作品,其第一个版本发布与 2007 年 11 月。Libev 的设计者声称 libev 拥有更快的速度,更小的体积,更多功能等优势,这些优势在很多测评中得到了证明。正因为其良好的性能,很多系统开始使用 libev 库。本章将介绍如何使用 Libev 实现提供问答服务的服务器。 (事实上,现存的***循环 / ***驱动库有很多,作者也无意推荐读者一定使用 libev 库,而只是为了说明***驱动模型给网络服务器编程带来的便利和好处。大部分的***驱动库都有着与 libev 库相类似的接口,只要明白大致的原理,即可灵活挑选合适的库。) 与前章的模型类似,libev 同样需要循环探测***是否产生。Libev 的循环体用 ev_loop 结构来表达,并用 ev_loop( ) 来启动。 void ev_loop( ev_loop* loop, int flags ) Libev 支持八种***类型,其中包括 IO ***。一个 IO ***用 ev_io 来表征,并用 ev_io_init() 函数来初始化: void ev_io_init(ev_io *io, callback, int fd, int events) 初始化内容包括回调函数 callback,被探测的句柄 fd 和需要探测的***,EV_READ 表“可读***”,EV_WRITE 表“可写***”。 现在,用户需要做的仅仅是在合适的时候,将某些 ev_io 从 ev_loop 加入或剔除。一旦加入,下个循环即会检查 ev_io 所指定的***有否发生;如果该***被探测到,则 ev_loop 会自动执行 ev_io 的回调函数 callback();如果 ev_io 被注销,则不再检测对应***。 无论某 ev_loop 启动与否,都可以对其添加或删除一个或多个 ev_io,添加删除的接口是 ev_io_start() 和 ev_io_stop()。 void ev_io_start( ev_loop *loop, ev_io* io ) void ev_io_stop( EV_A_* ) 由此,我们可以容易得出如下的“一问一答”的服务器模型。由于没有考虑服务器端主动终止连接机制,所以各个连接可以维持任意时间,客户端可以自由选择退出时机。图8. 使用libev库的服务器模型 上述模型可以接受任意多个连接,且为各个连接提供完全独立的问答服务。借助 libev 提供的***循环 / ***驱动接口,上述模型有机会具备其他模型不能提供的高效率、低***占用、稳定性好和编写简单等特点。 由于传统的 web 服务器,ftp 服务器及其他网络应用程序都具有“一问一答”的通讯逻辑,所以上述使用 libev 库的“一问一答”模型对构建类似的服务器程序具有参考价值;另外,对于需要实现远程监视或远程遥控的应用程序,上述模型同样提供了一个可行的实现方案。 总结 本文围绕如何构建一个提供“一问一答”的服务器程序,先后讨论了用阻塞型的 socket 接口实现的模型,使用多线程的模型,使用 select() 接口的基于***驱动的服务器模型,直到使用 libev ***驱动库的服务器模型。文章对各种模型的优缺点都做了比较,从比较中得出结论,即使用“***驱动模型”可以的实现更为高效稳定的服务器程序。文中描述的多种模型可以为读者的网络编程提供参考价值。

简述网络的几种主要拓扑结构,并分析其优缺点

计算机网络的拓扑结构主要有:总线型拓扑、星型拓扑、环型拓扑、树型拓扑和混合型拓扑。

1、星型网路拓扑结构:

优点:控制简单;故障诊断和隔离容易;方便服务;

缺点:电缆长度和安装工作量可观;中央节点负担较重,形成瓶颈;各站点的分布处理能力较低。

2、总线型网络拓扑结构:

优点:总线结构所需电缆数量少;结构简单又是无源工作,有较高的可靠性;易于扩充,增减用户方便。

缺点:传输距离有限,通信范围受到限制;故障诊断和隔离困难;分布式协议不保证信息及时传送,不具实时功能。站点必须是智能的,要有媒体访问控制功能,增加站点软件和硬件的开销。

网络拓扑结构形成过程中

首先***定某平面中布置着许多个节点,同时存在着一个均匀走动的离散的时钟,通过这个时钟将每个节点进入网络的时间记录下来,记录下来的时间都是随机分布的。每一个节点在进入网络时刻的前后所要***取的行为就是接收信息或者消息和发送对已收信息的响应。这些收发信息中设置了优先度和传达范围,它们将对信息的辐射范围产生着最为直接的影响。

以上内容参考:百度百科-拓扑结构

网络架构分析师,网络信息技术主管,上网络系统集成工程师分别做什么的?

网络系统集成工程师,就是给公司的企业网进行一次性组装网络所有组建。 网络架构分析师:就是CISCO网络设备的高层领域。 网络技术主管的主要职责 1.网络是否畅通的。 2。网络设备管理与维护。 3。网络操作系统维护。

麻烦***纳,谢谢!

巧借Deep Network Designer分析经典网络结构——AlexNet

关于如何使用Deep Network Designer,大家可以打开自己的MATLAB,在***一栏中找到Deep Network Designer点击打开即可。使用的具体流程详见我在介绍LeNet5一文中,这里就不在赘述了。地址:

AlexNet 是 vgg 网络和 resten 网络系列的基石。其网络架构中新颖的特征如下所示

1.以ReLu替代sigmoid和tanh函数。实践证明这样可以使网络更快收敛

2.其中最大池化( Max pooling)的概念也是在AlexNet提出的,即对每一个邻近像素组成的"池子",选取像素最大值作为输出。在LeNet中,池化的像素是不重叠的;而在 AlexNet 中进行的是有重叠的池化。(PS:我在介绍LeNet中的池化***用的也是最大池化)大量的实践表明,有重叠的最大池化能够很好的克服过拟合问题,提升系统性能。

3.随机丢弃(Dropout)为了避免系统参数更新过快导致的过拟合,每一次利用训练样本更新参数的时候,随机“丢弃”一定比例的神经元,被丢弃的神经元不再参与训练过程,输入和输出该神经元的权重系数也不做更新。这样每次训练时训练的网络构架都不一样,而这些不同的网络构架却分享共同训练的权重系数。实践表明,随机丢弃的技术技术减缓了网络收敛度,也大概率避免了过拟合的发生。

4.在多个GPU上训练。单个GPU存储空间有限,使用两块GPU,在每个GPU上存储一半的kernels,这两块GPU在特定层上通信

网络架构分析的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于网络架构分析论文、网络架构分析的信息别忘了在本站进行查找喔。

扫码二维码