请问你们觉得什么是e A暴雪游戏平台台还可以么

不能忘却的记忆-S.T.A.L.K.E.R游戏详细测试_硬件_科技时代_新浪网
不支持Flash
不能忘却的记忆-S.T.A.L.K.E.R游戏详细测试
Oscar、Dcx 
  1986年切尔诺贝利核电站核泄漏事故
  在开始《S.T.A.L.K.E.R 》游戏试玩之前,让我们先来温习一条1986年的新闻:
  “日,在进行一项实验时,切尔诺贝利核电站4号反应堆发生爆炸,造成30人当场死亡,8吨多强辐射物泄漏。此次核泄漏事故使电站周围6万多平方公里土地受到直接污染,320多万人受到核辐射侵害,酿成人类和平利用核能史上的一大灾难。事故发生后,原苏联政府和人民采取了一系列善后措施,清除、掩埋了大量污染物,为发生爆炸的4号反应堆建起了钢筋水泥“石棺”,并恢复了另3个发电机组的生产。此外,离核电站30公里以内的地区还被辟为隔离区,很多人称这一区域为“死亡区”。”
  然而切尔诺贝利核电站泄露事件的2个月之内,所有参与直升机封堆的人员全部壮烈牺牲,无一幸免,但正是这些英雄们的无畏,才换来了更多人生存的希望。
  核泄漏事故后,在医院接受治疗的儿童。
  由于核辐射的缘故,导致该地区产生大量的畸形婴儿。
  同时,一些动物由于受辐射影响.体形变的空前巨大。
  历时七年―S.T.A.L.K.E.R.终发布
  《S.T.A.L.K.E.R 》便是以那次切尔诺贝利核电站泄露事件为主题而制作的游戏, S.T.A.L.K.E.R.这是一长串英文的简写,游戏主要的背景是1986年苏联车诺比核电厂事变后的世界,以假想其发生了重大变异,当地环境产生怪物来发展,玩者将面对这个危险的环境,并一步步解开游戏的谜团,这款游戏具有相当优秀的画面,颓圮与灾难后的世界,配合极为真实又漂亮的风景,产生相当具有特色的FPS游戏。这款游戏的制作有别于其它欧美的游戏,主要原因在于开发小组是在乌克兰。
  这款游戏被定位为动作角色扮演而不是一般人认为的FPS游戏,已经表现出这款游戏的与众不同之处。这款游戏已经超越了普通的FPS游戏范畴而带上了浓浓的角色扮演味道。庞大的游戏范围、与大量的 NPC 交互、非线性的游戏进程以及事件背后错综的内幕,这些原本是开放 RPG 游戏的法宝如今都被融入《 S.T.A.L.K.E.R. 》之中。再加上动作游戏惊险刺激的战斗以及故事背景那诡秘的大灾难气氛,使《 S.T.A.L.K.E.R. 》散发着一种独特的吸引力。
  在游戏中,主角做一个探险者不止需要武器装备,水和食品和休息也都是必要生存条件,若是太长时间没有进食的话,你会发现自己行动的速度明显减慢,而且瞄准时难以把稳手中的枪。除了自己携带食物之外,游戏中甚至还允许你弄些“野味”来充饥,当然,考虑到身体健康这只能作为不得已时的选择。另一方面,《 S.T.A.L.K.E.R. 》的制作者们为了再现切尔诺贝利的废弃与荒凉感特地去做了实地考察,游戏的设计中参照了大量的照片与地图,游戏中的切尔诺贝利可说是原样复制了出来。
  这款游戏早在2000年时,便已经着手开发,原本预计是在2003年3月发布,但由于多方面的原因导致其多次跳票,如今已经跳票整整4年了。4年对于一款游戏来说,开发的时间实在是太长了,不仅微软的架构已经从DirectX 9.0逐渐向DirectX 10迈进,显卡的架构也更新了几代,那么当前主流的显卡运行这款游戏的效果会是怎样呢?后文中将为大家做出详细的测试。
  S.T.A.L.K.E.R特效展示及画面素质
  游戏的界面设计也是依照事故遗址的风格
  《 S.T.A.L.K.E.R. 》选用的是称为X-Ray的引擎。这款引擎支持Shader Model3.0,拥有目前流行的HDR效果设计,可以实现实时日夜气候光线变化,能为每一个纹理像素提供实时动态光线追踪功能,实现动态户外光线效果,能根据不同状况来实现不同的武器效果,比如雾天、雨天、大风时段武器都能实现不同的效果。
  虽然界面设计的非常有事故原址的风格,但游戏特效的选择却与事故原址一样古老,与经两年发布的3D游戏相比,《 S.T.A.L.K.E.R. 》所提供的画质调校选项少的可怜,仅有光线、画质、分辨率、伽玛值等几个简单的设置,其中的动态光线追踪(Dynamic Lighting)特效是DirectX 9.0b下基于Shader Model2.0中Pixel Shader2.0下的功能。游戏共分为5档画面调校,最大分辨率支持到。在该设置选项中最不能让我们满意的是没有提供更多的关于特效的选项,我们设置不能关闭游戏场景中的HDR特效,这对于一些硬件配置不高的用户来说是一个非常不妙的设计。
  在全物件动态光线追踪(Full Dynamic Lighting)的特效下,Min画质的图像效果
  在全物件动态光线追踪(Full Dynamic Lighting)的特效下,Med画质的图像效果,注意这时的杂草数量的增多。
  在全物件动态光线追踪(Full Dynamic Lighting)的特效下,Med画质的图像效果,这时的杂草数量达到最大。看来这款游戏的画质设定是以游戏中渲染物件(Object)的多少来恒定的,对于一款开发周期达7年之久的游戏来说:《 S.T.A.L.K.E.R. 》的画面水平是不能让我们满意的。下面我们将测试目前的一些主流的显卡在其中的速度表现。
  S.T.A.L.K.E.R测试平台及环境介绍
  我们的测试平台使用目前比较主流的Conroe处理器加P965 Chipset的搭配,Conroe选择的是E6300,而P965我们则使用ASUS的P5B Deluxe WiFi版本。显卡方面我们选择了市面上主流的6款产品进行测试,分别是ATi Radeon X1950Pro(575/1400MHz)、ATi Radeon X1650XT(575/1400MHz)、ATi Radeon X1650GT(450/1200MHz)、NVIDIA GeForce 7300GT(500/1000MHz) 128MB DDR3、NVIDIA GeForce 7600GT(500/1400MHz) 256MB DDR3、NVIDIA GeForce 7900GS(435/1320MHz) 256MB DDR3。
  我们《 S.T.A.L.K.E.R. 》的游戏设置环境为全物件光线追踪、画质效果是Max
  S.T.A.L.K.E.R测试成绩-
  在的标准分辨率下,ATi与NVIDIA低端的Radeon X1650GT与GeForce 7300GT均未能达到30fps的流畅运行标准,只有中端产品的GeForce 7600GT与Radeon X1650XT等级产品才能勉强流畅运行,看来若想在更高分辨率下进行游戏,非是要Radeon X1950Pro级别的显卡才能胜任。
  S.T.A.L.K.E.R测试成绩-
  当我们把分辨率提高到之后,中端产品的GeForce 7600GT与Radeon X1650XT已经不胜负荷跌落到30fps以下,就连GeForce 7900GS也仅维持在30fps左右。只有Radeon X1950Pro能维持在39fps上运行,其中GeForce 7300GT更是跌落到14fps,已经不堪托付。
  S.T.A.L.K.E.R测试成绩-
  在的高分辨率下,GeForce 7300GT甚至只有8fps的运行速率。GeForce 7900GS甚至只只有21fps的速率,只有Radeon X1950Pro才能勉强维持在30fps,看来像要在高分辨率下维持游戏的流畅运行还是需要更大的投入。
  显卡测试结论:性能平平的X-Ray引擎
  通过上面的试玩以及显卡的实际效能测试,我想可以给《 S.T.A.L.K.E.R. 》做一个简单的小结:X-Ray引擎可以提供比较主流的Shader Model3.0下的功能支持,比如HDR后处理、实时日夜气候光线变化,能为每一个纹理像素提供实时动态光线追踪功能,实现动态户外光线效果,能根据不同状况来实现不同的武器效果,比如雾天、雨天、大风时段武器都能实现不同的效果等。在AI方面有尤其非常突出的表现。但实际的游戏画面中纹理处理比较糟糕,许多金属物件比如汽车就显得很没有质感,此外物理效果也比较简单。
  在显卡硬件的选择方面,我们针对目前市场上流行的ATi、NVIDIA高中低三档产品进行了对比测试,分别给出了80xx1200三种分辨率的测试成绩,我们可以根据分辨率的递增来依次选择我们测试中的各档产品,不过在该游戏中同档次的显卡ATi芯片的产品表现的效率较高,比如同档次的GeForce 7300GT与Radeon X1650GT中,就以Radeon X1650GT的效率较高,因此我们推荐喜欢该游戏的玩家购买ATi的相应产品。对于硬件配置较低的玩家,我们建议把游戏视频设置中的光线设置改为静态光线,这样就能节省下大量的渲染资源,让游戏更流畅。Enjoy it!
【】【】【
【】【打印】【】
不支持Flash
天极yesky的其他文章
不支持Flash
不支持Flash
?     &p&题主学习完了Andrew的机器学习,如果对当前人工智能领域最火的深度学习感兴趣,那么可以参考一下我的这个答案。&/p&&p&对于深度学习入门,我感觉斯坦福的&a href=&///?target=http%3A//cs231n.github.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS231n Convolutional Neural Networks for Visual Recognition&i class=&icon-external&&&/i&&/a&很适合。重心是基础的深度学习以及在计算机视觉的应用(主要是CNN 卷积神经网络)。目前2017春季的课程还介绍了很Modern的GAN(生成对抗网络)和Deep Reinforcement Learning(深度强化学习,AlphaGo和前几天OpenAI的DOTA AI的背后原理)。&/p&&p&如果对于深度学习在自然语言处理的应用有兴趣,那么斯坦福的&a href=&///?target=http%3A//web.stanford.edu/class/cs224n/syllabus.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS224n: Natural Language Processing with Deep Learning&i class=&icon-external&&&/i&&/a&很适合学习(里面的深度学习算法主要是RNN和LSTM等).&/p&&p&现在深度学习最广泛应用的平台(&50%)是Google的TensorFlow。说实话,官方的文档不是很容易让初学者理解,斯坦福的&a href=&///?target=http%3A//web.stanford.edu/class/cs20si/syllabus.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tensorflow for Deep Learning Research&i class=&icon-external&&&/i&&/a&是今年刚开的TensorFlow课。不仅讲解TensorFlow这个平台,而且会手把手教你如何实现CNN和RNN。&/p&&p&除此之外,深度强化学习当前也很火,这方面UCL的David Silver(DeepMind研究员,AlphaGo一作)的&a href=&///?target=http%3A//www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reinforcement Learnin&i class=&icon-external&&&/i&&/a&g是很权威的。不过这个课只有理论,code部分可以使用Google Brain研究员Denny Britz的&a href=&///?target=https%3A///dennybritz/reinforcement-learning& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&dennybritz/reinforcement-learning&i class=&icon-external&&&/i&&/a&,他在这个repository里为UCL这门课每一个章节用TensorFlow写了code,能够方便大家学习(他的tensorflow code写的很清晰易懂)。另外,medium上有个&a href=&///?target=https%3A///emergent-future/simple-reinforcement-learning-with-tensorflow-part-0-q-learning-with-tables-and-neural-networks-d& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深度强化学习教程&i class=&icon-external&&&/i&&/a&也很不错(它用的tensorflow,我是照着这个code学习的。它包含现在很常用的一些model,所以很实用,code也很清晰)。现在伯克利和斯坦福都有了深度强化学习的课,不过focus不太一样,感兴趣的话也可以看看:&a href=&///?target=http%3A//rll.berkeley.edu/deeprlcourse/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS 294 Deep Reinforcement Learning, Fall 2017&i class=&icon-external&&&/i&&/a&, &a href=&///?target=http%3A//web.stanford.edu/class/cs234/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS234: Reinforcement Learning&i class=&icon-external&&&/i&&/a&。&/p&&p&如果想用中文学习的话,&a href=&///?target=https%3A//morvanzhou.github.io/tutorials/machine-learning/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&莫烦 Python&i class=&icon-external&&&/i&&/a&的讲义很不错,对于TensorFlow,PyTorch,Keras这几个常用Library,以及深度强化学习都有讲解(附有code)。&/p&&p&另外,听说现在吴恩达开了一门&a href=&///?target=https%3A//www.coursera.org/specializations/deep-learning& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深度学习课&i class=&icon-external&&&/i&&/a&,可以免费试用七天,题主可以试一下。&/p&&p&&br&&/p&&p&PS: 我也是物理系学生,一月底才决定转深度学习/人工智能方向。春季学期修了机器学习课,在深度学习方向我完整学习了Stanford CS231n和UCL Reinforcement Learning,其他几门课都只看了一部分。目前在做深度强化学习。对于自然语言处理和GAN也都有兴趣。&/p&
题主学习完了Andrew的机器学习,如果对当前人工智能领域最火的深度学习感兴趣,那么可以参考一下我的这个答案。对于深度学习入门,我感觉斯坦福的很适合。重心是基础的深度学习以及在计算机视…
&img src=&/50/v2-d835e89c6ea474da2bc3c085503bff83_b.jpg& data-rawwidth=&1268& data-rawheight=&714& class=&origin_image zh-lightbox-thumb& width=&1268& data-original=&/50/v2-d835e89c6ea474da2bc3c085503bff83_r.jpg&&&p&&b&----------------------- 更新&/b&&/p&&p&很多知友反馈技术操作上如何去实现,这里小编已经把大家的需求反馈给产品大大,大大听闻一激动说要写个系列,一步一步给大家剖解!(目前第二篇已发布,欢迎大家关注更新~)&/p&&p&系列二:&a href=&/p/& class=&internal&&4步教你玩转可视化大屏设计|内附实际操作&/a&&/p&&p&&b&------------------------ 分割线&/b&&/p&&p&每年的双十一,天猫都会在整点时刻直播战绩,可怕的战绩背后,不知道大家是否留意到背后展示的数据大屏,简直酷炫吊炸天。&/p&&img src=&/v2-23846ebbde6ccb_b.jpg& data-caption=&& data-rawwidth=&899& data-rawheight=&467& class=&origin_image zh-lightbox-thumb& width=&899& data-original=&/v2-23846ebbde6ccb_r.jpg&&&p&(图片源自网络)&/p&&p&所谓大屏,顾名思义就是一个很大很大的屏。&/p&&p&举个例子,Dashboard可能大家有所了解,就是将一些业务的关键指标以数据可视化的方式展示。而大屏就是将Dashboard展示到一块或多块LED大屏上。经常用在公司的展览中心、老板的办公室,还有城市交通管控中心、交易大厅等等。一般怎么清楚怎么来,怎么酷炫怎么搞。譬如人民的名义里就有这样一幕:&/p&&img src=&/v2-ff67ac8ecc93c_b.png& data-caption=&& data-rawwidth=&2560& data-rawheight=&1340& class=&origin_image zh-lightbox-thumb& width=&2560& data-original=&/v2-ff67ac8ecc93c_r.png&&&p&(图片源自网络)&/p&&p&前几天,有位番薯(我们的坛友 &a class=&member_mention& href=&/people/b99acfc121ddbe7dab8c01f1& data-hash=&b99acfc121ddbe7dab8c01f1& data-hovercard=&p$b$b99acfc121ddbe7dab8c01f1&&@李诚泽&/a& )在&a href=&/?target=http%3A///thread-.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&帆软论坛&i class=&icon-external&&&/i&&/a&发了个生产大屏的帖子,自己用FineReport做了个大屏的模板,引发了很大反响。&/p&&img src=&/v2-66fe13bd4132a8dac1ab504b_b.png& data-caption=&& data-rawwidth=&1900& data-rawheight=&918& class=&origin_image zh-lightbox-thumb& width=&1900& data-original=&/v2-66fe13bd4132a8dac1ab504b_r.png&&&p&也是应于这样的契机,这里抛砖引玉,围绕如何制作的美而实用的大屏,讲讲帆软的经验。&/p&&p&&b&(注:以下demo每处细节都值得推敲借鉴,手机端建议横屏观看,效果更佳!)&/b&&/p&&img src=&/v2-27bcea3ffc307dd1f4eea_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&571& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-27bcea3ffc307dd1f4eea_r.jpg&&&h2&1、布局排版&/h2&&p&大屏首先是要服务于业务,让业务指标和数据合理的展现。由于往往展现的是一个企业全局的业务,一般分为主要指标和次要指标两个层次,主要指标反映核心业务,次要指标用于进一步阐述分析。所以在制作时给予不一样的侧重。&/p&&p&这里推荐几种常见的版式。&/p&&img src=&/v2-b2f3c9bd0a_b.png& data-caption=&& data-rawwidth=&1486& data-rawheight=&765& class=&origin_image zh-lightbox-thumb& width=&1486& data-original=&/v2-b2f3c9bd0a_r.png&&&p&上面几个版式不是金科定律,只是通常推荐的主次分布版式,能让信息一目了然。实际项目中,不一定使用主次分布,也可以使用平均分布,或者可以二者结合进行适当调整。比如下图所示,指标很多很多,存在多个层级的,就根据上面所说的基本原则进行一些微调,效果会很好。&/p&&img src=&/v2-a74eaab47f98_b.png& data-caption=&& data-rawwidth=&1216& data-rawheight=&459& class=&origin_image zh-lightbox-thumb& width=&1216& data-original=&/v2-a74eaab47f98_r.png&&&p&&br&&/p&&img src=&/v2-0a846d3b42d3cae0d74e_b.png& data-caption=&& data-rawwidth=&1219& data-rawheight=&467& class=&origin_image zh-lightbox-thumb& width=&1219& data-original=&/v2-0a846d3b42d3cae0d74e_r.png&&&p&附上几个典型的主次分布的大屏效果给大家看下,是不是看上去更加清晰呢,不会让人有找不到重点的感觉。&/p&&img src=&/v2-042b0ad666e9dd13dfb08f87_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&630& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-042b0ad666e9dd13dfb08f87_r.jpg&&&p&&br&&/p&&img src=&/v2-b960b7f4a61fdfe72cd62_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-b960b7f4a61fdfe72cd62_r.jpg&&&h2&2、配 色&/h2&&p&合理的布局能让业务内容更富有层次,合理的配色能让观看者更舒适。配色的学问很复杂,这里就先讲一讲背景色。背景色又分为整体背景以及单个元素的背景,无论是哪一个,都遵从两点基本原则:深色调&一致性。&/p&&p&之所以选择深色调,主要是为了避免视觉刺激。参加过大型会议的童鞋应该有感受,如果演示PPT是浅色系的,投放到大屏上后会比较刺眼,尤其是前排童鞋简直在遭罪受。下图是两个驾驶舱页面深浅色对比,看图片也许看不出来,感兴趣的可以找公司的大屏硬件测试测试,看看哪个更让人眼睛看着舒服。&/p&&img src=&/v2-d0c4eb9ff55b7b61f6f86_b.png& data-caption=&& data-rawwidth=&1949& data-rawheight=&965& class=&origin_image zh-lightbox-thumb& width=&1949& data-original=&/v2-d0c4eb9ff55b7b61f6f86_r.png&&&p&&br&&/p&&img src=&/v2-dc623a40ae300c18747e_b.jpg& data-caption=&& data-rawwidth=&864& data-rawheight=&486& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&/v2-dc623a40ae300c18747e_r.jpg&&&p&整体背景深色系,可选的余地还是很多的,但是配起来能让多数人都觉得好看的还是以深蓝色系为主,如下所示是几个推荐的配色方案。这几个深色配色,是我们调研下来最常用的背景设置。大家如果去网上搜罗好看的大屏或者驾驶舱页面效果,很多都是这几个色系里头的。&/p&&img src=&/v2-85565b2fbf6aec4d39a0cf93e54ffb58_b.jpg& data-caption=&& data-rawwidth=&1199& data-rawheight=&199& class=&origin_image zh-lightbox-thumb& width=&1199& data-original=&/v2-85565b2fbf6aec4d39a0cf93e54ffb58_r.jpg&&&p&当然,背景不一定要用颜色的,也可以用图片。图片的使用依旧遵从整体深色的原则,同时搭配其他一些现实特性可以让整体看着更有科技感。推荐使用一些带有星空、条纹、渐变线、点缀效果之类的图片。&/p&&img src=&/v2-d835e89c6ea474da2bc3c085503bff83_b.jpg& data-caption=&& data-rawwidth=&1268& data-rawheight=&714& class=&origin_image zh-lightbox-thumb& width=&1268& data-original=&/v2-d835e89c6ea474da2bc3c085503bff83_r.jpg&&&p&单个元素的背景,首先是要和整体背景色系保持一致性,避免突兀。另外一个小技巧,就是透明度的使用。根据实际项目经验,这里极其推荐大家为单个的组件元素搭配一些透明色,透明度设置在10%上下为宜,具体以实际效果微调。如下几个模板,组件增加透明效果后,整体效果有质的提升。&/p&&img src=&/v2-a89cea3f50c8e5b4fc0fcd_b.jpg& data-caption=&& data-rawwidth=&1268& data-rawheight=&714& class=&origin_image zh-lightbox-thumb& width=&1268& data-original=&/v2-a89cea3f50c8e5b4fc0fcd_r.jpg&&&p&&br&&/p&&img src=&/v2-0533bbf2bcbbcb8140f7bdc_b.jpg& data-caption=&& data-rawwidth=&1263& data-rawheight=&710& class=&origin_image zh-lightbox-thumb& width=&1263& data-original=&/v2-0533bbf2bcbbcb8140f7bdc_r.jpg&&&p&&br&&/p&&img src=&/v2-848b27bef790ffe_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&711& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-848b27bef790ffe_r.jpg&&&h2&3、点缀&/h2&&p&细节影响感官体验,在大屏展现上,细节也会极大的影响整体效果。通过适当给元素、标题、数字等添加一些诸如边框、图画等在内的点缀效果,能帮助提升整体美观度。&/p&&p&如下图所示销售驾驶舱大屏,顶部的标题通过左右两个对称线条进行点缀,各个组件的细分标题通过不规则渐变色图片进行点缀,另外每个组件都搭配使用了简洁的边框以提升层次感。&/p&&img src=&/v2-a57e185bdfe1715feb8ce2_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&719& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-a57e185bdfe1715feb8ce2_r.jpg&&&p&比如下面图所示大屏,给组件及其标题增加一些不规则的渐变色边框,让整体看上去更富有科技感。&/p&&img src=&/v2-bd8f34574a87_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&547& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-bd8f34574a87_r.jpg&&&p&&br&&/p&&img src=&/v2-ffb807c96ab0b84d4c4f_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&549& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-ffb807c96ab0b84d4c4f_r.jpg&&&p&如下图所示的航空大屏,给元素增加一些飞机图标、图画之类的拟物效果,让大屏更真实生动。&/p&&img src=&/v2-ecdefe96dcfeb1db5cf83181_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-ecdefe96dcfeb1db5cf83181_r.jpg&&&h2&4、动效&/h2&&p&动效的范围很广,可以从很多角度解读,最好的参照就是PPT的动画特效,比如前文所提的背景动画、刷新的加载动画、轮播动画、图表的闪烁动画、地图的流向动画等等,都属于动态效果的范畴。前文说过,动效的增加能让大屏看上去是活的,增加观感体验。但过分的动效极其容易喧宾夺主,让观看者的眼球不知道往哪里聚焦,反而丧失了业务展现价值。这个度很难把握,既要平衡酷炫效果,又要突出内容。&/p&&p&列举几个制作的大屏动态示例demo。&/p&&p&如下图所示销售大屏,核心指标车辆总价值以数字显示,通过FineReport 的数据监控功能,动态刷新数值。&/p&&img src=&/v2-fdb315592fdd8f52b2f0fa_b.jpg& data-caption=&& data-rawwidth=&1603& data-rawheight=&711& data-thumbnail=&/v2-fdb315592fdd8f52b2f0fa_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1603& data-original=&/v2-fdb315592fdd8f52b2f0fa_r.gif&&&p&再如下图所示IT运维大屏,中间地图上模拟的呼吸动画,底部的滚动消息等。&/p&&img src=&/v2-2ada25cea09e165b18af8c_b.jpg& data-caption=&& data-rawwidth=&1603& data-rawheight=&711& data-thumbnail=&/v2-2ada25cea09e165b18af8c_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1603& data-original=&/v2-2ada25cea09e165b18af8c_r.gif&&&p&如下图所示金融大屏的轮播动画,借助轮播效果,来实现同一个位置滚动播放不同的指标内容,避免平铺展开所有指标把大屏界面挤满。&/p&&img src=&/v2-03ebee70b1fe9cb5b69ce284e4a22b49_b.jpg& data-caption=&& data-rawwidth=&1603& data-rawheight=&711& data-thumbnail=&/v2-03ebee70b1fe9cb5b69ce284e4a22b49_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1603& data-original=&/v2-03ebee70b1fe9cb5b69ce284e4a22b49_r.gif&&&p&再比如这个销售驾驶舱,通过边框动画、地图流向动画,来增加大屏展示的整体活力。&/p&&img src=&/v2-0d6abc9af4a0cb186a8ec023aebb4d32_b.jpg& data-caption=&& data-rawwidth=&1413& data-rawheight=&761& data-thumbnail=&/v2-0d6abc9af4a0cb186a8ec023aebb4d32_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1413& data-original=&/v2-0d6abc9af4a0cb186a8ec023aebb4d32_r.gif&&&h2&5、总结&/h2&&p&从布局、背景、点缀边框、动效等几个方面,简单介绍了一些大屏展现页面制作的基本方法。其实不难发现很多环节都是相通或交叉的,比如单个元素的背景色,往往会和一些边框一起使用;比如一些动态效果,可能是背景或者边框本身的GIF动画。&/p&&p&大屏展现作为数据可视化的一个典型使用场景,其涵盖的知识太多太多了,一个完整的大屏项目从开始调研到实施交付可能需要开发工程师、项目经理、视觉工程师、UI工程师、硬件工程师等等众多专业人员的参与。&/p&&blockquote&注:&br&1、以上大屏均是由第三方客户基于finereport制作的效果图,图中数据并非真实数据,仅供参考。&br&2、如有任何形式的冒犯请私信联系小编,但原则上与帆软无关。&br&3、本文只是展示了大屏的布局设计,关于后台技术,之后会写一篇相关技术文,欢迎关注。&br&4、关于产品,很高兴我们的可视化有把大家稍微&震慑&了一下下。但其实大屏只是finereport技术的冰山一角,finereport本质上是一款商用的报表BI类工具,解决的不只是可视化展示的问题,还有企业的各类业务分析,流程数据管理,常规报表制作,更多知识可右戳——&a href=&/question/& class=&internal&&如何评价报表软件FineReport?&/a&&/blockquote&&p&&/p&
----------------------- 更新很多知友反馈技术操作上如何去实现,这里小编已经把大家的需求反馈给产品大大,大大听闻一激动说要写个系列,一步一步给大家剖解!(目前第二篇已发布,欢迎大家关注更新~)系列二:
&img src=&/50/v2-1a9c65dcfe935fcfa0a95_b.png& data-rawwidth=&900& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&/50/v2-1a9c65dcfe935fcfa0a95_r.png&&&p&&b&开始的话:&/b&文章是实验楼投稿文章,文章有大量的Python项目,所以对Python感兴趣的可以看看。&/p&&p&---------------------------------------------&/p&&p&&b&前言:&/b&&/p&&p&不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行。&/p&&p&这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从中选择自己想做的项目进行参考学习练手,你也可以从中寻找灵感去做自己的项目。&/p&&p&&b&70个Python项目列表:&/b&&/p&&p&1、&a href=&/?target=https%3A///courses/370& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 图片转字符画】&i class=&icon-external&&&/i&&/a&&/p&&p&2、&a href=&/?target=https%3A///courses/368& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【200行Python代码实现2048】&i class=&icon-external&&&/i&&/a&&/p&&p&3、&a href=&/?target=https%3A///courses/623& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3 实现火车票查询工具】&i class=&icon-external&&&/i&&/a&&/p&&p&4、&a href=&/?target=https%3A///courses/599& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【高德API+Python解决租房问题 】&i class=&icon-external&&&/i&&/a&&/p&&p&5、&a href=&/?target=https%3A///courses/589& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3 色情图片识别】&i class=&icon-external&&&/i&&/a&&/p&&p&6、&a href=&/?target=https%3A///courses/364& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 破解验证码】&i class=&icon-external&&&/i&&/a&&/p&&p&7、&a href=&/?target=https%3A///courses/552& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现简单的Web服务器】&i class=&icon-external&&&/i&&/a&&/p&&p&8、&a href=&/?target=https%3A///courses/49& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【pygame开发打飞机游戏】&i class=&icon-external&&&/i&&/a&&/p&&p&9、&a href=&/?target=https%3A///courses/487& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Django 搭建简易博客】&i class=&icon-external&&&/i&&/a&&/p&&p&10、&a href=&/?target=https%3A///courses/677& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python基于共现提取《釜山行》人物关系】&i class=&icon-external&&&/i&&/a&&/p&&p&11、&a href=&/?target=https%3A///courses/142& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【基于scrapy爬虫的天气数据采集(python)】&i class=&icon-external&&&/i&&/a&&/p&&p&12、&a href=&/?target=https%3A///courses/31& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Flask 开发轻博客】&i class=&icon-external&&&/i&&/a&&/p&&p&13、&a href=&/?target=https%3A///courses/651& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3 图片隐写术】&i class=&icon-external&&&/i&&/a&&/p&&p&14、&a href=&/?target=https%3A///courses/647& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现简易 Shell】&i class=&icon-external&&&/i&&/a&&/p&&p&15、&a href=&/?target=https%3A///courses/729& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【使用 Python 解数学方程】&i class=&icon-external&&&/i&&/a&&/p&&p&16、&a href=&/?target=https%3A///courses/705& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【PyQt 实现简易浏览器】&i class=&icon-external&&&/i&&/a&&/p&&p&17、&a href=&/?target=https%3A///courses/593& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【神经网络实现手写字符识别系统 】&i class=&icon-external&&&/i&&/a&&/p&&p&18、&a href=&/?target=https%3A///courses/674& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现简单画板】&i class=&icon-external&&&/i&&/a&&/p&&p&19、&a href=&/?target=https%3A///courses/561& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现3D建模工具】&i class=&icon-external&&&/i&&/a&&/p&&p&20、&a href=&/?target=https%3A///courses/782& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【NBA常规赛结果预测——利用Python进行比赛数据分析】&i class=&icon-external&&&/i&&/a&&/p&&p&21、&a href=&/?target=https%3A///courses/707& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【神经网络实现人脸识别任务】&i class=&icon-external&&&/i&&/a&&/p&&p&22、&a href=&/?target=https%3A///courses/70& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python文本解析器】&i class=&icon-external&&&/i&&/a&&/p&&p&23、&a href=&/?target=https%3A///courses/637& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3 & OpenCV 视频转字符动画】&i class=&icon-external&&&/i&&/a&&/p&&p&24、&a href=&/?target=https%3A///courses/595& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3 实现淘女郎照片爬虫 】&i class=&icon-external&&&/i&&/a&&/p&&p&25、&a href=&/?target=https%3A///courses/725& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3实现简单的FTP认证服务器】&i class=&icon-external&&&/i&&/a&&/p&&p&26、&a href=&/?target=https%3A///courses/633& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【基于 Flask 与 MySQL 实现番剧推荐系统】&i class=&icon-external&&&/i&&/a&&/p&&p&27、&a href=&/?target=https%3A///courses/495& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现端口扫描器】&i class=&icon-external&&&/i&&/a&&/p&&p&28、&a href=&/?target=https%3A///courses/580& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【使用 Python 3 编写系列实用脚本】&i class=&icon-external&&&/i&&/a&&/p&&p&29、&a href=&/?target=https%3A///courses/769& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现康威生命游戏】&i class=&icon-external&&&/i&&/a&&/p&&p&30、&a href=&/?target=https%3A///courses/686& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【川普撞脸希拉里(基于 OpenCV 的面部特征交换) 】&i class=&icon-external&&&/i&&/a&&/p&&p&31、&a href=&/?target=https%3A///courses/708& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 3 实现 Markdown 解析器】&i class=&icon-external&&&/i&&/a&&/p&&p&32、&a href=&/?target=https%3A///courses/780& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 气象数据分析 -- 《Python 数据分析实战》】&i class=&icon-external&&&/i&&/a&&/p&&p&33、&a href=&/?target=https%3A///courses/614& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现键值数据库】&i class=&icon-external&&&/i&&/a&&/p&&p&34、&a href=&/?target=https%3A///courses/777& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【k-近邻算法实现手写数字识别系统】&i class=&icon-external&&&/i&&/a&&/p&&p&35、&a href=&/?target=https%3A///courses/714& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【ebay在线拍卖数据分析】&i class=&icon-external&&&/i&&/a&&/p&&p&36、&a href=&/?target=https%3A///courses/741& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现英文新闻摘要自动提取 】&i class=&icon-external&&&/i&&/a&&/p&&p&37、&a href=&/?target=https%3A///courses/672& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现简易局域网视频聊天工具】&i class=&icon-external&&&/i&&/a&&/p&&p&38、&a href=&/?target=https%3A///courses/581& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【基于 Flask 及爬虫实现微信娱乐机器人】&i class=&icon-external&&&/i&&/a&&/p&&p&39、&a href=&/?target=https%3A///courses/554& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现Python解释器】&i class=&icon-external&&&/i&&/a&&/p&&p&40、&a href=&/?target=https%3A///courses/683& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3基于Scapy实现DDos】&i class=&icon-external&&&/i&&/a&&/p&&p&41、&a href=&/?target=https%3A///courses/712& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现密码强度检测器】&i class=&icon-external&&&/i&&/a&&/p&&p&42、&a href=&/?target=https%3A///courses/814& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【使用 Python 实现深度神经网络】&i class=&icon-external&&&/i&&/a&&/p&&p&43、&a href=&/?target=https%3A///courses/791& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现从excel读取数据并绘制成精美图像】&i class=&icon-external&&&/i&&/a&&/p&&p&44、&a href=&/?target=https%3A///courses/746& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【人机对战初体验:Python基于Pygame实现四子棋游戏】&i class=&icon-external&&&/i&&/a&&/p&&p&45、&a href=&/?target=https%3A///courses/594& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3 实现可控制肉鸡的反向Shell】&i class=&icon-external&&&/i&&/a&&/p&&p&46、&a href=&/?target=https%3A///courses/761& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python打造漏洞扫描器 】&i class=&icon-external&&&/i&&/a&&/p&&p&47、&a href=&/?target=https%3A///courses/678& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python应用马尔可夫链算法实现随机文本生成】&i class=&icon-external&&&/i&&/a&&/p&&p&48、&a href=&/?target=https%3A///courses/728& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【数独游戏的Python实现与破解】&i class=&icon-external&&&/i&&/a&&/p&&p&49、&a href=&/?target=https%3A///courses/756& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【使用Python定制词云】&i class=&icon-external&&&/i&&/a&&/p&&p&50、&a href=&/?target=https%3A///courses/60& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python开发简单计算器】&i class=&icon-external&&&/i&&/a&&/p&&p&51、&a href=&/?target=https%3A///courses/579& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现 FTP 弱口令扫描器】&i class=&icon-external&&&/i&&/a&&/p&&p&52、&a href=&/?target=https%3A///courses/734& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现Huffman编码解压缩文件】&i class=&icon-external&&&/i&&/a&&/p&&p&53、&a href=&/?target=https%3A///courses/636& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现Zip文件的暴力破解 】&i class=&icon-external&&&/i&&/a&&/p&&p&54、&a href=&/?target=https%3A///courses/655& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3 智能裁切图片】&i class=&icon-external&&&/i&&/a&&/p&&p&55、&a href=&/?target=https%3A///courses/640& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现网站模拟登陆】&i class=&icon-external&&&/i&&/a&&/p&&p&56、&a href=&/?target=https%3A///courses/813& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【给Python3爬虫做一个界面.妹子图网实战】&i class=&icon-external&&&/i&&/a&&/p&&p&57、&a href=&/?target=https%3A///courses/673& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 3 实现图片转彩色字符】&i class=&icon-external&&&/i&&/a&&/p&&p&58、&a href=&/?target=https%3A///courses/679& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【自联想器的 Python 实现】&i class=&icon-external&&&/i&&/a&&/p&&p&59、&a href=&/?target=https%3A///courses/688& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现简单滤镜】&i class=&icon-external&&&/i&&/a&&/p&&p&60、&a href=&/?target=https%3A///courses/81& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Flask 实现简单聊天室】&i class=&icon-external&&&/i&&/a&&/p&&p&61、&a href=&/?target=https%3A///courses/604& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【基于PyQt5 实现地图中定位相片拍摄位置】&i class=&icon-external&&&/i&&/a&&/p&&p&62、&a href=&/?target=https%3A///courses/583& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现模板引擎】&i class=&icon-external&&&/i&&/a&&/p&&p&63、&a href=&/?target=https%3A///courses/776& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现遗传算法求解n-queens问题】&i class=&icon-external&&&/i&&/a&&/p&&p&64、&a href=&/?target=https%3A///courses/625& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python3 实现命令行动态进度条】&i class=&icon-external&&&/i&&/a&&/p&&p&65、&a href=&/?target=https%3A///courses/639& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 获取挂号信息并邮件通知】&i class=&icon-external&&&/i&&/a&&/p&&p&66、&a href=&/?target=https%3A///courses/778& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python实现java web项目远端自动化更新部署】&i class=&icon-external&&&/i&&/a&&/p&&p&67、&a href=&/?target=https%3A///courses/789& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【使用 Python3 编写 Github 自动周报生成器】&i class=&icon-external&&&/i&&/a&&/p&&p&68、&a href=&/?target=https%3A///courses/384& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【使用 Python 生成分形图片】&i class=&icon-external&&&/i&&/a&&/p&&p&69、&a href=&/?target=https%3A///courses/518& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现 Redis 异步客户端】&i class=&icon-external&&&/i&&/a&&/p&&p&70、&a href=&/?target=https%3A///courses/828& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【Python 实现中文错别字高亮系统】&i class=&icon-external&&&/i&&/a&&/p&&p&&b&最后:&/b&&/p&&p&以上项目列表希望可以给你在Python学习中带来帮助~&/p&
开始的话:文章是实验楼投稿文章,文章有大量的Python项目,所以对Python感兴趣的可以看看。---------------------------------------------前言:不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言…
&a href=&/people/55b24d478d333dfe9ad95& data-hash=&55b24d478d333dfe9ad95& class=&member_mention& data-hovercard=&p$b$55b24d478d333dfe9ad95& data-editable=&true& data-title=&@王小新&&@王小新&/a&
编译自 Medium&br&量子位 出品 | 公众号 QbitAI&br&&p&本文作者Erik Hallstr?m是一名深度学习研究工程师,他的这份教程以Echo-RNN为例,介绍了如何在TensorFlow环境中构建一个简单的循环神经网络。&br&&/p&&h1&什么是RNN?&/h1&&p&RNN是循环神经网络(Recurrent Neural Network)的英文缩写,它能结合数据点之间的特定顺序和幅值大小等多个特征,来处理序列数据。更重要的是,这种网络的输入序列可以是任意长度的。&/p&&p&举一个简单的例子:数字时间序列,具体任务是根据先前值来预测后续值。在每个时间步中,循环神经网络的输入是当前值,以及一个表征该网络在之前的时间步中已经获得信息的状态向量。该状态向量是RNN网络的编码记忆单元,在训练网络之前初始化为零向量。&/p&&p&&img src=&/v2-16a65ab55b5d763a1a638e_b.jpg& data-rawwidth=&759& data-rawheight=&376& class=&origin_image zh-lightbox-thumb& width=&759& data-original=&/v2-16a65ab55b5d763a1a638e_r.jpg&&图1:RNN处理序列数据的步骤示意图。&/p&&p&本文只对RNN做简要介绍,主要专注于实践:如何构建RNN网络。如果有网络结构相关的疑惑,建议多看看说明性文章。&/p&&p&关于RNN的介绍,强烈推荐《A Critical Review of Recurrent Neural Networks for Sequence Learning》,这篇出自加州大学圣地亚哥分校研究人员的文章介绍了几乎所有最新最全面的循环神经网络。(地址:&a href=&/?target=https%3A//arxiv.org/pdf/.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&9.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&/p&&p&在了解RNN网络的基本知识后,就很容易理解以下内容。&/p&&h1&构建网络&/h1&&p&我们先建立一个简单的回声状态网络(Echo-RNN)。这种网络能记忆输入数据信息,在若干时间步后将其回传。我们先设定若干个网络常数,读完文章你就能明白它们的作用。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&from&/span& &span class=&nn&&__future__&/span& &span class=&kn&&import&/span& &span class=&n&&print_function&/span&&span class=&p&&,&/span& &span class=&n&&division&/span&
&span class=&kn&&import&/span& &span class=&nn&&numpy&/span& &span class=&kn&&as&/span& &span class=&nn&&np&/span&
&span class=&kn&&import&/span& &span class=&nn&&tensorflow&/span& &span class=&kn&&as&/span& &span class=&nn&&tf&/span&
&span class=&kn&&import&/span& &span class=&nn&&matplotlib.pyplot&/span& &span class=&kn&&as&/span& &span class=&nn&&plt&/span&
&span class=&n&&num_epochs&/span& &span class=&o&&=&/span& &span class=&mi&&100&/span&
&span class=&n&&total_series_length&/span& &span class=&o&&=&/span& &span class=&mi&&50000&/span&
&span class=&n&&truncated_backprop_length&/span& &span class=&o&&=&/span& &span class=&mi&&15&/span&
&span class=&n&&state_size&/span& &span class=&o&&=&/span& &span class=&mi&&4&/span&
&span class=&n&&num_classes&/span& &span class=&o&&=&/span& &span class=&mi&&2&/span&
&span class=&n&&echo_step&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&
&span class=&n&&batch_size&/span& &span class=&o&&=&/span& &span class=&mi&&5&/span&
&span class=&n&&num_batches&/span& &span class=&o&&=&/span& &span class=&n&&total_series_length&/span&&span class=&o&&//&/span&&span class=&n&&batch_size&/span&&span class=&o&&//&/span&&span class=&n&&truncated_backprop_length&/span&
&/code&&/pre&&/div&&h1&生成数据&/h1&&p&现在生成随机的训练数据,输入为一个随机的二元向量,在echo_step个时间步后,可得到输入的“回声”,即输出。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&generateData&/span&&span class=&p&&():&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&array&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&choice&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&n&&total_series_length&/span&&span class=&p&&,&/span& &span class=&n&&p&/span&&span class=&o&&=&/span&&span class=&p&&[&/span&&span class=&mf&&0.5&/span&&span class=&p&&,&/span& &span class=&mf&&0.5&/span&&span class=&p&&]))&/span&
&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&roll&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&echo_step&/span&&span class=&p&&)&/span&
&span class=&n&&y&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&:&/span&&span class=&n&&echo_step&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&reshape&/span&&span class=&p&&((&/span&&span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&o&&-&/span&&span class=&mi&&1&/span&&span class=&p&&))&/span&
&span class=&c1&&# The first index changing slowest, subseries as rows&/span&
&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&n&&y&/span&&span class=&o&&.&/span&&span class=&n&&reshape&/span&&span class=&p&&((&/span&&span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&o&&-&/span&&span class=&mi&&1&/span&&span class=&p&&))&/span&
&span class=&k&&return&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&y&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&包含batch_size的两行代码,将数据重构为新矩阵。神经网络的训练,需要利用小批次数据(mini-batch),来近似得到关于神经元权重的损失函数梯度。在训练过程中,随机批次操作能防止过拟合和降低硬件压力。整个数据集通过数据重构转化为一个矩阵,并将其分解为多个小批次数据。&/p&&img src=&/v2-773bd4d49a9da23c023da186df429a85_b.png& data-rawwidth=&800& data-rawheight=&469& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-773bd4d49a9da23c023da186df429a85_r.png&&图2:重构数据矩阵的示意图,箭头曲线指示了在不同行上的相邻时间步。浅灰色矩形代表“0”,深灰色矩形代表“1”。&h1&构建计算图&/h1&&p&首先在TensorFlow中建立一个计算图,指定将要执行的运算。该计算图的输入和输出通常是多维数组,也被称为张量(tensor)。我们可以利用CPU、GPU和远程服务器的计算资源,在会话中迭代执行该计算图。&/p&&h1&变量和占位符&/h1&&p&本文所用的基本TensorFlow数据结构是变量和占位符。占位符是计算图的“起始节点”。在运行每个计算图时,批处理数据被传递到占位符中。另外,RNN状态向量也是存储在占位符中,在每一次运行后更新输出。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&batchX_placeholder&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&float32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&n&&truncated_backprop_length&/span&&span class=&p&&])&/span&
&span class=&n&&batchY_placeholder&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&int32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&n&&truncated_backprop_length&/span&&span class=&p&&])&/span&
&span class=&n&&init_state&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&float32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&n&&state_size&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&&p&网络的权重和偏差作为TensorFlow的变量,在运行时保持不变,并在输入批数据后进行逐步更新。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&W&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&rand&/span&&span class=&p&&(&/span&&span class=&n&&state_size&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&n&&state_size&/span&&span class=&p&&),&/span& &span class=&n&&dtype&/span&&span class=&o&&=&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&float32&/span&&span class=&p&&)&/span&
&span class=&n&&b&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&zeros&/span&&span class=&p&&((&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&n&&state_size&/span&&span class=&p&&)),&/span& &span class=&n&&dtype&/span&&span class=&o&&=&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&float32&/span&&span class=&p&&)&/span&
&span class=&n&&W2&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&rand&/span&&span class=&p&&(&/span&&span class=&n&&state_size&/span&&span class=&p&&,&/span& &span class=&n&&num_classes&/span&&span class=&p&&),&/span&&span class=&n&&dtype&/span&&span class=&o&&=&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&float32&/span&&span class=&p&&)&/span&
&span class=&n&&b2&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&zeros&/span&&span class=&p&&((&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&n&&num_classes&/span&&span class=&p&&)),&/span& &span class=&n&&dtype&/span&&span class=&o&&=&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&float32&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&下图表示了输入数据矩阵,以及虚线窗口指出了占位符的当前位置。在每次运行时,这个“批处理窗口”根据箭头指示方向,以定义好的长度从左边滑到右边。在示意图中,batch_size(批数据数量)为3,truncated_backprop_length(截断反传长度)为3,total_series_length(全局长度)为36。这些参数是用来示意的,与实际代码中定义的值不一样。在示意图中序列各点也以数字标出。&/p&&img src=&/v2-363aa29de3f3_b.jpg& data-rawwidth=&800& data-rawheight=&430& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-363aa29de3f3_r.jpg&&图3:训练数据的示意图,用虚线矩形指示当前批数据,用数字标明了序列顺序。&h1&拆分序列&/h1&&p&现在开始构建RNN计算图的下个部分,首先我们要以相邻的时间步分割批数据。 &/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# Unpack columns&/span&
&span class=&n&&inputs_series&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&unstack&/span&&span class=&p&&(&/span&&span class=&n&&batchX_placeholder&/span&&span class=&p&&,&/span& &span class=&n&&axis&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&labels_series&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&unstack&/span&&span class=&p&&(&/span&&span class=&n&&batchY_placeholder&/span&&span class=&p&&,&/span& &span class=&n&&axis&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&如下图所示,可以按批次分解各列,转成list格式文件。RNN会同时从不同位置开始训练时间序列:在示例中分别从4到6、从16到18和从28到30。用plural和series做变量名,是为了强调该变量为list文件,用来在每一步中表示具有多个位置的时间序列。&/p&&img src=&/v2-be2dc9f03c75ea4aa5b0535_b.png& data-rawwidth=&800& data-rawheight=&583& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-be2dc9f03c75ea4aa5b0535_r.png&&图4:将数据拆分为多列的原理图,用数字标出序列顺序,箭头表示相邻的时间步。&p&在我们的时间序列数据中,在三个位置同时开启训练,所以在前向传播时需要保存三个状态。我们在参数定义时就已经考虑到这一点了,故将init_state设置为3。 &/p&&h1&前向传播&/h1&&p&接下来,我们继续构建计算图中执行RNN计算功能的模块。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# Forward pass&/span&
&span class=&n&&current_state&/span& &span class=&o&&=&/span& &span class=&n&&init_state&/span&
&span class=&n&&states_series&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&k&&for&/span& &span class=&n&&current_input&/span& &span class=&ow&&in&/span& &span class=&n&&inputs_series&/span&&span class=&p&&:&/span&
&span class=&n&&current_input&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&reshape&/span&&span class=&p&&(&/span&&span class=&n&&current_input&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&])&/span&
&span class=&n&&input_and_state_concatenated&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&concat&/span&&span class=&p&&([&/span&&span class=&n&&current_input&/span&&span class=&p&&,&/span& &span class=&n&&current_state&/span&&span class=&p&&],&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&c1&&# Increasing number of columns&/span&
&span class=&n&&next_state&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&tanh&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&matmul&/span&&span class=&p&&(&/span&&span class=&n&&input_and_state_concatenated&/span&&span class=&p&&,&/span& &span class=&n&&W&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&n&&b&/span&&span class=&p&&)&/span&
&span class=&c1&&# Broadcasted addition&/span&
&span class=&n&&states_series&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&next_state&/span&&span class=&p&&)&/span&
&span class=&n&&current_state&/span& &span class=&o&&=&/span& &span class=&n&&next_state&/span&
&/code&&/pre&&/div&&p&在这段代码中,我们通过计算current_input * Wa + current_state * Wbin,得到两个仿射变换的总和input_and_state_concatenated。在连接这两个张量后,只用了一个矩阵乘法即可在每个批次中添加所有样本的偏置b。&/p&&img src=&/v2-d4b04751eac8c5f448e1_b.png& data-rawwidth=&800& data-rawheight=&437& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-d4b04751eac8c5f448e1_r.png&&&p&图5:第8行代码的矩阵计算示意图,省略了非线性变换arctan。&/p&&p&你可能会想知道变量truncated_backprop_lengthis的作用。在训练时,RNN被看做是一种在每一层都有冗余权重的深层神经网络。在训练开始时,这些层由于展开后占据了太多的计算资源,因此要在有限的时间步内截断。在每个批次训练时,网络误差反向传播了三次。&/p&&h1&计算Loss&/h1&&p&这是计算图的最后一部分,我们建立了一个从状态到输出的全连接层,用于softmax分类,标签采用One-hot编码,用于计算每个批次的Loss。 &/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&logits_series&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&matmul&/span&&span class=&p&&(&/span&&span class=&n&&state&/span&&span class=&p&&,&/span& &span class=&n&&W2&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&n&&b2&/span& &span class=&k&&for&/span& &span class=&n&&state&/span& &span class=&ow&&in&/span& &span class=&n&&states_series&/span&&span class=&p&&]&/span& &span class=&c1&&#Broadcasted addition&/span&
&span class=&n&&predictions_series&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&nn&/span&&span class=&o&&.&/span&&span class=&n&&softmax&/span&&span class=&p&&(&/span&&span class=&n&&logits&/span&&span class=&p&&,&/span&&span class=&n&&labels&/span&&span class=&p&&)&/span& &span class=&k&&for&/span& &span class=&n&&logits&/span& &span class=&ow&&in&/span& &span class=&n&&logits_series&/span&&span class=&p&&]&/span&
&span class=&n&&losses&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&nn&/span&&span class=&o&&.&/span&&span class=&n&&sparse_softmax_cross_entropy_with_logits&/span&&span class=&p&&(&/span&&span class=&n&&logits&/span&&span class=&p&&,&/span& &span class=&n&&labels&/span&&span class=&p&&)&/span& &span class=&k&&for&/span& &span class=&n&&logits&/span&&span class=&p&&,&/span& &span class=&n&&labels&/span& &span class=&ow&&in&/span& &span class=&nb&&zip&/span&&span class=&p&&(&/span&&span class=&n&&logits_series&/span&&span class=&p&&,&/span&&span class=&n&&labels_series&/span&&span class=&p&&)]&/span&
&span class=&n&&total_loss&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&reduce_mean&/span&&span class=&p&&(&/span&&span class=&n&&losses&/span&&span class=&p&&)&/span&
&span class=&n&&train_step&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&train&/span&&span class=&o&&.&/span&&span class=&n&&AdagradOptimizer&/span&&span class=&p&&(&/span&&span class=&mf&&0.3&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&minimize&/span&&span class=&p&&(&/span&&span class=&n&&total_loss&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&最后一行是添加训练函数,TensorFlow将自动执行反向传播函数:对每批数据执行一次计算图,并逐步更新网络权重。&/p&&p&这里调用的tosparse_softmax_cross_entropy_with_logits函数,能在内部算得softmax函数值后,继续计算交叉熵。在示例中,各类是互斥的,非0即1,这也是将要采用稀疏自编码的原因。标签的格式为[batch_size,num_classes]。&/p&&h1&可视化结果 &/h1&&p&我们利用可视化功能tensorboard,在训练过程中观察网络训练情况。它将会在时间维度上绘制Loss值,显示在训练批次中数据输入、数据输出和网络结构对不同样本的实时预测效果。 &/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&plot&/span&&span class=&p&&(&/span&&span class=&n&&loss_list&/span&&span class=&p&&,&/span& &span class=&n&&predictions_series&/span&&span class=&p&&,&/span& &span class=&n&&batchX&/span&&span class=&p&&,&/span& &span class=&n&&batchY&/span&&span class=&p&&):&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&subplot&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&cla&/span&&span class=&p&&()&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&plot&/span&&span class=&p&&(&/span&&span class=&n&&loss_list&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&batch_series_idx&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&mi&&5&/span&&span class=&p&&):&/span&
&span class=&n&&one_hot_output_series&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&array&/span&&span class=&p&&(&/span&&span class=&n&&predictions_series&/span&&span class=&p&&)[:,&/span& &span class=&n&&batch_series_idx&/span&&span class=&p&&,&/span& &span class=&p&&:]&/span&
&span class=&n&&single_output_series&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&array&/span&&span class=&p&&([(&/span&&span class=&mi&&1&/span& &span class=&k&&if&/span& &span class=&n&&out&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span& &span class=&o&&&&/span& &span class=&mf&&0.5&/span& &span class=&k&&else&/span& &span class=&mi&&0&/span&&span class=&p&&)&/span& &span class=&k&&for&/span& &span class=&n&&out&/span& &span class=&ow&&in&/span& &span class=&n&&one_hot_output_series&/span&&span class=&p&&])&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&subplot&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&n&&batch_series_idx&/span& &span class=&o&&+&/span& &span class=&mi&&2&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&cla&/span&&span class=&p&&()&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&axis&/span&&span class=&p&&([&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&truncated_backprop_length&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&])&/span&
&span class=&n&&left_offset&/span& &span class=&o&&=&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&n&&truncated_backprop_length&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&bar&/span&&span class=&p&&(&/span&&span class=&n&&left_offset&/span&&span class=&p&&,&/span& &span class=&n&&batchX&/span&&span class=&p&&[&/span&&span class=&n&&batch_series_idx&/span&&span class=&p&&,&/span& &span class=&p&&:],&/span& &span class=&n&&width&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&o&&=&/span&&span class=&s2&&&blue&&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&bar&/span&&span class=&p&&(&/span&&span class=&n&&left_offset&/span&&span class=&p&&,&/span& &span class=&n&&batchY&/span&&span class=&p&&[&/span&&span class=&n&&batch_series_idx&/span&&span class=&p&&,&/span& &span class=&p&&:]&/span& &span class=&o&&*&/span& &span class=&mf&&0.5&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&o&&=&/span&&span class=&s2&&&red&&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&bar&/span&&span class=&p&&(&/span&&span class=&n&&left_offset&/span&&span class=&p&&,&/span& &span class=&n&&single_output_series&/span& &span class=&o&&*&/span& &span class=&mf&&0.3&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&o&&=&/span&&span class=&s2&&&green&&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&p&&()&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&pause&/span&&span class=&p&&(&/span&&span class=&mf&&0.0001&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&h1&建立训练会话&/h1&&p&已经完成构建网络的工作,开始训练网络。在TensorFlow中,该计算图会在一个会话中执行。在每一步开始时,都会随机生成新的数据。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&with&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&Session&/span&&span class=&p&&()&/span& &span class=&k&&as&/span& &span class=&n&&sess&/span&&span class=&p&&:&/span&
&span class=&n&&sess&/span&&span class=&o&&.&/span&&span class=&n&&run&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&global_variable&/span& &span class=&n&&_initializer&/span&&span class=&p&&())&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&ion&/span&&span class=&p&&()&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&figure&/span&&span class=&p&&()&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&show&/span&&span class=&p&&()&/span&
&span class=&n&&loss_list&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&k&&for&/span& &span class=&n&&epoch_idx&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&n&&num_epochs&/span&&span class=&p&&):&/span&
&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&n&&generateData&/span&&span class=&p&&()&/span&
&span class=&n&&_current_state&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&zeros&/span&&span class=&p&&((&/span&&span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&n&&state_size&/span&&span class=&p&&))&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&New data, epoch&&/span&&span class=&p&&,&/span& &span class=&n&&epoch_idx&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&batch_idx&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&n&&num_batches&/span&&span class=&p&&):&/span&
&span class=&n&&start_idx&/span& &span class=&o&&=&/span& &span class=&n&&batch_idx&/span& &span class=&o&&*&/span& &span class=&n&&truncated_backprop_length&/span&
&span class=&n&&end_idx&/span& &span class=&o&&=&/span& &span class=&n&&start_idx&/span& &span class=&o&&+&/span& &span class=&n&&truncated_backprop_length&/span&
&span class=&n&&batchX&/span& &span class=&o&&=&/span& &span class=&n&&x&/span&&span class=&p&&[:,&/span&&span class=&n&&start_idx&/span&&span class=&p&&:&/span&&span class=&n&&end_idx&/span&&span class=&p&&]&/span&
&span class=&n&&batchY&/span& &span class=&o&&=&/span& &span class=&n&&y&/span&&span class=&p&&[:,&/span&&span class=&n&&start_idx&/span&&span class=&p&&:&/span&&span class=&n&&end_idx&/span&&span class=&p&&]&/span&
&span class=&n&&_total_loss&/span&&span class=&p&&,&/span& &span class=&n&&_train_step&/span&&span class=&p&&,&/span& &span class=&n&&_current_state&/span&&span class=&p&&,&/span& &span class=&n&&_predictions_series&/span& &span class=&o&&=&/span& &span class=&n&&sess&/span&&span class=&o&&.&/span&&span class=&n&&run&/span&&span class=&p&&(&/span&
&span class=&p&&[&/span&&span class=&n&&total_loss&/span&&span class=&p&&,&/span& &span class=&n&&train_step&/span&&span class=&p&&,&/span& &span class=&n&&current_state&/span&&span class=&p&&,&/span& &span class=&n&&predictions_series&/span&&span class=&p&&],&/span&
&span class=&n&&feed_dict&/span&&span class=&o&&=&/span&&span class=&p&&{&/span&
&span class=&n&&batchX_placeholder&/span&&span class=&p&&:&/span&&span class=&n&&batchX&/span&&span class=&p&&,&/span&
&span class=&n&&batchY_placeholder&/span&&span class=&p&&:&/span&&span class=&n&&batchY&/span&&span class=&p&&,&/span&
&span class=&n&&init_state&/span&&span class=&p&&:&/span&&span class=&n&&_current_state&/span&
&span class=&p&&})&/span&
&span class=&n&&loss_list&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&_total_loss&/span&&span class=&p&&)&/span&
&span class=&k&&if&/span& &span class=&n&&batch_idx&/span&&span class=&o&&%&/span&&span class=&mi&&100&/span& &span class=&o&&==&/span& &span class=&mi&&0&/span&&span class=&p&&:&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&Step&&/span&&span class=&p&&,&/span&&span class=&n&&batch_idx&/span&&span class=&p&&,&/span& &span class=&s2&&&Loss&&/span&&span class=&p&&,&/span& &span class=&n&&_total_loss&/span&&span class=&p&&)&/span&
&span class=&n&&plot&/span&&span class=&p&&(&/span&&span class=&n&&loss_list&/span&&span class=&p&&,&/span& &span class=&n&&_predictions_series&/span&&span class=&p&&,&/span& &span class=&n&&batchX&/span&&span class=&p&&,&/span& &span class=&n&&batchY&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&ioff&/span&&span class=&p&&()&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&show&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&从第15-19行可以看出,在每次迭代中往前移动truncated_backprop_length步,但可能有不同的stride值。这样做的缺点是,为了封装相关的训练数据,truncated_backprop_length的值要显著大于时间依赖值(本文中为3步),否则可能会丢失很多有效信息,如图6所示。&/p&&img src=&/v2-a1f0d75bce94_b.png& data-rawwidth=&800& data-rawheight=&261& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-a1f0d75bce94_r.png&&&p&图6:数据示意图&/p&&p&我们用多个正方形来代表时间序列,上升的黑色方块表示回波输出,由输入回波(黑色方块)经过三次激活后得到。滑动批处理窗口在每次运行时也滑动了三次,在示例中之前没有任何批数据,用来封装依赖关系,因此它不能进行训练。 &/p&&p&请注意,本文只是用一个简单示例解释了RNN如何工作,可以轻松地用几行代码中来实现此网络。此网络将能够准确地了解回声行为,因此不需要任何测试数据。&/p&&p&在训练过程中,该程序实时更新图表,如图7所示。蓝色条表示用于训练的输入信号,红色条表示训练得到的输出回波,绿色条是RNN网络产生的预测回波。不同的条形图显示了在当前批次中多个批数据的预测回波。&/p&&p&我们的算法能很快地完成训练任务。左上角的图表输出了损失函数,但为什么曲线上有尖峰?答案就在下面。&/p&&p&&img src=&/v2-94d48d0a33e9fba468a33f91cffdc36f_b.png& data-rawwidth=&800& data-rawheight=&510& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-94d48d0a33e9fba468a33f91cffdc36f_r.png&&图7:各图分别为Loss,训练的输入和输出数据(蓝色和红色)以及预测回波(绿色)。&/p&&p&尖峰的产生原因是在新的迭代开始时,会产生新的数据。由于矩阵重构,每行上的第一个元素与上一行中的最后一个元素会相邻。但是所有行中的前几个元素(第一个除外)都具有不包含在该状态中的依赖关系,因此在最开始的批处理中,网络的预测功能不良。&/p&
编译自 Medium 量子位 出品 | 公众号 QbitAI 本文作者Erik Hallstr?m是一名深度学习研究工程师,他的这份教程以Echo-RNN为例,介绍了如何在TensorFlow环境中构建一个简单的循环神经网络。 什么是RNN?RNN是循环神经网络(Recurrent Neural Netwo…
看到高票回答很受启发!听说 R2016b 已经支持在 script 里定义 function 但是敝厂还在小范围兼容性测试阶段所以呢本喵暂时还没用上,所以呢下面要说的东西还是有一些参考价值的吧。&br&&br&有同学在问题&a href=&/question/& class=&internal&&你什么时候对MATLAB感到绝望? - 数学&/a&下回答道「我要给每一个函数新建一个文件的时候。 」想必各位跟我一样深感赞同吧。哪怕写一点稍微能用的东西,都是以

我要回帖

更多关于 五e游戏平台 的文章

 

随机推荐