1p电池1s1p是什么意思升级 要求断开pc调参 请问各位怎么断开调参???谢谢各位了

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
调参软件 - DJI Innovations.PDF 38页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
调参软件 - DJI Innovations
你可能关注的文档:
··········
··········
Multi-Rotor
www.dji-innovations.com
警告和免责申明
是一款优秀的自劢驾驶系统。和直升机相比,她能够为低高度多旋翼飞行器在狭小空间内提供卓越的飞
行特性。无论您的多旋翼飞行器尺寸如何,一旦装上 Naza 它就丌再是一个普通玩具。尽管我仧竭尽全力让控
制器在上电时工作在最安全的状态,例如:在有 USB 连接时,禁止电调収送信号至电机;当油门摇杆丌是在
最低位置时,禁止油门输入和摇杆命令,我仧仍然强烈建议您在校准和设置参数时叏下桨翼,使用非劢力电源
为主控供电,幵使儿童迖离。因使用本产品而造成的直接戒间接损失不伤害,深圳市大疆创新科技有限公司概
DJI Naza 主要用亍四旋翼和六旋翼飞行器上,是为多旋翼飞行器爱好者仧开収的一种自劢驾驶系统。Naza
自劢驾驶系统可以实现姿态稳定和高度锁定功能,可广泛应用亍休闲娱乐、航拍以及 FPV 等航模运劢中。
未接入 GPS 无 GPS 姿态模式
GPS 姿态模式
尾舵角速度
最大尾舵角速度为 200°/秒
摇杆线性控制
机身姿态控制;摇杆中位对应机身姿态 0? ,摇杆端
最大角速度为 150 度/秒,没有姿
摇杆命令的含义
点对应机身姿态 45?
态角度限制和垂直方向速度锁定
在距离地面 1 米以上的高度,可以徆好地锁定飞行
在有 GPS 信号的情况
无位置锁定,仅稳定姿态
丌建议(非与业人员勿试)
下,锁定位置丌发
丢失 GPS 信号十秒钟
无 GPS 信号
无位置锁定,仅稳定姿态
后,飞机迕入姿态模式
姿态不速度混合控制;低压保护
依靠多年操作经验
增强型失控保护
自劢平衡失控保护
盒内物品清单
主控器(MC)×1
主控器是系统的核心,通过它将电子调速器和遥控接收机等设备连接
起来从而实现自劢驾驶功能。其中的 IMU (惯性测量单元)包含3
轴加速度计、3 轴陀螺仦和气压高度计用亍识别姿态和高度。
多功能模块(VU)×1
设计。该模块解决了多旋翼系统高功耗的问题,为整个
Naza 系统以及其他电子设备供电幵监规电源。它同时包拪了一个用
亍显示 Naza 各种状态的 LED 和用亍调参以及固件升级的 USB 口。
选配 GPS&指南针模块×1
GPS 指南针模块用亍识别位置和方向。
选配 GPS 支架 x1
GPS 不指南针模块为磁敏感设备 ,请使用该支架来安装GPS 模块。
USB 线缆用亍设置 MC 和升级固件。
3 针舵机线
正在加载中,请稍后...51CTO旗下网站
如何与深度学习服务器优雅的交互?
下面就向各位服务器宝宝的爸爸妈妈们传授一下育女经验,让她早日成长为一个省心的深度学习服务器。
作者:夕小瑶Elsa来源:| 15:59
0. 故事序言
如果有人问小夕:&小夕,要是人工智能的就业岗位一夜之间消失了,你会去转行做什么呢?&
答曰:&当然是去做Linux运维啊23333&
小夕有一台自己负责的GPU服务器,她可让小夕操碎了心呐,真是好不容易把这娇气的小公举拉扯大了。下面就向各位服务器宝宝的爸爸妈妈们传授一下育女经验,让她早日成长为一个省心的深度学习服务器。
下面小夕将依次介绍:
操作系统建议
ssh免密快速登录
内网穿透(跨网段访问服务器)
文件传输与实时同步
多开发环境管理
多任务管理(并行调参)
睡觉调参模式(串行调参)
关于Jupyer Notebook
单任务霸占GPU模式
来自订阅号评论区的其他神操作
1. 操作系统建议
如果你主要用tensorflow来作为你的深度学习框架,那么小夕还是建议安装16.04服务器版。注意是服务器版!为什么呢?因为有很多显卡的高版本驱动与桌面版的图形界面不兼容,导致容易出现循环登陆问题,要解决循环登陆问题也是极其的麻烦,小夕曾经在所里配的笔记本上捣鼓过一周多,重装10余次系统,尝遍国内外各种方法,最终放弃r(st)q
所以这一次小夕直接为服务器装了ubuntu16.04的服务器版!注意服务器版是没有图形界面的,对shell不熟悉的童鞋要尽快打好基础哦。果然,在服务器版下装驱动装cuda一路next,0errors,0warnings
由于在高中时实在讨厌炸了国产软件全家桶对windows的狂轰滥炸,导致一遍遍的重复
while True:
& & 系统变乱
& & 系统变卡
& & 重装系统
的过程,于是大学里在一学长的诱惑下,成功入了mac的坑,从此整个世界都清净了,同时对命令行(mac与linux都是基于posix标准,命令行/shell语法高度相似)的沦陷一发不可收拾。。。(好像又跑题了?咳咳,小夕是想说,由于最近几年很少接触windows了,所以本文所列tricks可能对windows的兼容性略差。不过话说回来,做深度学习的日常怎么可能在windows上进行啊喂,不知道pytorch都懒得出windows版本了嘛。(放钩---&
2. ssh免密快速登录
远程登录最最方便的当然就是ssh啦。看小夕的一键登录!
第一行黄色的是小夕的用户名、电脑名、当前目录。小夕设置的命令就是sshdlnlp,敲上这个命令直接进入服务器!
实现这个非常简单,分两步:
首先,将你的登录命令写入你的pc端的bash启动脚本中。Mac系统为 ~/.bash_profile ,linux系统为 ~/.bashrc 。例如你的服务器用户名为dlnlp,ip为102.10.60.23,那么就把这句登录命令写进去:
alias&sshdlnlp=&ssh&dlnlp@102.10.60.23&&&&
感谢评论区 @karajan1001 指出,还有一种更科学强大的方法:将你的服务器信息写入PC端的ssh配置文件中,配置文件位于 ~/.ssh/config ,例如你的服务器用户名为dlnlp,ip为102.10.60.23,那么就把这句写进去:
Host dlnlp
[一个Tab]User dlnlp
[一个Tab]Hostname 102.10.60.23
[一个Tab]Port 22
(Host后面那个dlnlp是你起的名字,你也可以用更简短的名字)
这样可以 ssh dlnlp 也能快捷登录,注意中间的空格哈。而且scp也更加方便了。
当然,登录命令叫sshdlnlp,你也可以改成别的。保存后别忘 source ~/.bash_profile 或者 source ~/.bashrc 激活一下启动脚本哦。
然后,经过第一步后,只需要再敲密码就可以进入啦。但是懒癌至深的我们怎么能容忍敲密码这么麻烦的事情呢!(划掉,应该是小仙女怎么能容忍敲密码这种事情呢)但是我们又不能牺牲服务器的安全性,那怎么办呢?考验大学里计算机网络基础的时候到了~
也很简单,把你PC端的ssh公钥写入服务器的ssh信任列表里就可以啦。首先用`ssh-keygen`命令生成rsa密钥对(生成一只私钥和一只公钥),一路enter即可,但是注意:
之前有已经生成过的同学在此处就选择n吧,没有生成过的同学就一路next~
然后去 ~/.ssh/ 文件夹下将公钥发送到服务器上的某文件夹里:
然后去服务器上,把你PC端的公钥丢进ssh信任列表:
cat&id_rsa.pub&&&&~/.ssh/authorized_keys&
好啦~搞定啦,再回到你的PC端登录试试吧,是不是连输入密码都省掉啦。
3. 内网穿透(跨网段访问服务器)
但是注意哦,如果你的服务器是在局域网内,那你的PC离开这个局域网的时候当然就找不到你的服务器啦。想要在家里用GPU服务器?很简单,小夕教你分分钟内网穿透!
在内网穿透方面,小夕试了好几种方案后,感觉还是花生壳对新手最友好也最稳定。我们的内网穿透只需要将服务器内网ip以及22端口号(即ssh端口号)映射到外网ip的某个端口号。这个过程使用花生壳非常简单,在网上有很多教程,小夕就不吕病V笪颐且龅木褪墙飧鐾馔ip和端口号也封装成一条命令,比如花生壳分配给我们的外网ip是103.44.145.240,端口是12560,那么只需要把这个写入客户端shell启动脚本:
alias&sshdlnlp_remote=&ssh&-p&12560&dlnlp@103.44.145.240&&
(别忘用source刷新启动脚本)
之后就可以在世界各地用一条命令访问你的gpu服务器啦。
4. 文件传输与同步
对于一次性的文件传输,这方面最简单的当然还是直接使用scp命令啦,文件夹和文件都能轻松传输。
但是我们做深度学习的话,在服务器端大面积改代码、重量级调试的话还是不方便,毕竟服务器上没有图形界面,大部分人还是用不惯vim的,那么能不能在PC端用漂亮的编辑器修改代码,将修改结果实时的同步到服务器端呢?当然可以!这里小夕推荐文件同步神器syncthing。
剩下的就是傻瓜式配置啦。记得要更改文件夹刷新频率哦(默认是60秒,我们可以改的短一点,比如3秒),这样在客户端我们用漂亮的文本编辑器对代码的改动就能实时的同步到服务器上啦,在服务器端就只需要负责运行就可以咯。
5. 多开发环境管理
如果不幸你的GPU服务器并不是你一个人用,那么这时多人(尤其是混入小白多话)经常把服务器默认的python环境弄的乌烟瘴气,比如有人用python2,有人用python3,有人用tensorflow1.3,有人用0.12等...最后导致大家的程序全跑崩了。
所以在服务器端管理深度学习的开发环境是极其必要的,这里anaconda直接搞定!每个人建立和管理自己的开发环境,包括python版本、各种库的版本等,互不干扰。而且在发布project时,也方便直接将环境导出为requirements文件,免得自己去手写啦。
6. 多任务管理(并行调参)
如果你的服务器上有多个GPU,或者你的任务消耗GPU资源不多,那么并行的训练模型调参数是极大提高开发效率的!这里小夕给出几种场景下的常用方案:
1、比如我们在服务器上除了训练还要接着干别的事情(比如还要捣鼓一下贪吃蛇什么的),那么我们就可以直接将训练任务挂后台。具体如下。
在linux中,在命令后面加上 & 符号可以将命令在后台执行,为了能看到训练日志,我们当时还需要输出重定向(否则会打印到屏幕上干扰正常工作的),所以比如我们调batchsize参数时可以这样:
dlnlp@ubuntu:~$&python&train.py&&
当然再挂上其他batchsize大小,如:
dlnlp@ubuntu:~$&python&train.py&&dlnlp@ubuntu:~$&python&train.py&&dlnlp@ubuntu:~$&python&train.py&&
通过 jobs 命令可以看到后台任务的运行状况(running、stopped等),通过 bg [任务号] 可以让后台stopped的命令继续running,通过 fg [任务号] 可以让后台的任务来前台执行。对于前台已经执行起来的任务,可以 ctrl+z 来丢进后台(丢后台时stop了的话用bg让其run起来)。
感谢微信用户A Bad Candy在微信订阅号后台留言提醒上面的丢后台方法会在ssh断开连接后进程终止,因此:
如果我们还不希望ssh断开后导致训练任务终止,那么需要再在命令前面加上 nohup 。如:
dlnlp@ubuntu:~$ nohup python train.py --batchsize=16 & log_batch16.txt &
2、如果我们特别着急,不仅要并行挂着很多训练任务,而且都要实时的监控它们的训练进展,那么使用 screen命令吧,这个命令就相当于可以让你同时开很多个窗口(就像桌面上那样,你可以开很多应用程序的很多窗口),而且多个窗口之间可以轻松切换,同样这种方法不会因为ssh的断开而停止训练任务。
具体的操作可以直接在linux下 man screen 来查看screen命令的帮助文档。英文恐惧症的童鞋可以看本文参考文献[1]。
7. 睡觉调参模式(串行调参)
大部分场合下我们没有那么多充裕的GPU可以用,我们一般只能一次挂一个任务,但是我们又有很重的调参任务,那怎么办呢?
依然很简单啦,首先,装好python-fire这个工具。
它可以非常轻松的将你的python程序变成命令行程序,并且可以轻松的将你要调的参数封装成命令行参数的形式。
然后,写一个调参shell脚本,把你要调的参数全都写进去!比如就像这样:
(当然别忘在代码里将训练的summary写到某个文件里)
然后就可以挂上这个脚本去睡觉啦~睡到天亮发现各个最优参数都找到了,超级开心有木有。
8. 关于jupyter notebook
jupyter notebook这个神器小夕在历史文章中写过啦,也是一个重量级调参神器!或者直接可以说深度学习神器!在服务器端依然犀利的无可替代,只需要如下的tricks。
1、服务器端开启jupyter notebook后
然后复制最后那一行的 token=xxx ,这个token就是远程访问的密码!同时记下 最后那行显示的端口号 8888(因为如果服务器上同时开多个的话,端口号就不一定是8888了哦),然后去PC端做一个端口映射!即通过ssh隧道来将服务器端的8888端口号映射到本地(PC端)的某个端口(如1234):
ssh&-L&1234:localhost:8888&dlnlp@102.10.60.23&
(这个操作同样可以用于远程监视服务器端tensorboard)
这时就可以在PC端的浏览器
http://localhost:1234&
直接访问服务器上的jupyter notebook啦~当然,访问时会让你输入密码,这时就输入之前记下的那个token哦。
2、让jupyer notebook跟anaconda开发环境融合。
默认的情况下jupyter notebook是运行在系统默认环境里的,如果要让它运行在我们自己用ananconda创建的环境中,要进入那个环境中,然后安装 nb_conda 这个库:
conda&install&nb_conda&
这时再开启jupyter notebook就能选择在我们这个环境里运行代码啦。
9. 单任务全霸占模式
有时我们的训练任务非常重要且急迫,且绝对不允许被别人挤崩,或者我们明知要占用全部GPU资源了,那么这时我们就可以。。。emmm事先说明,非必要时刻请勿频繁使用哦:
使用linux中的 run-one 命令,这个命令可以保证同一条命令最多同时运行一个。比如 run-one python xxx 就会只允许运行一个python程序,后来的python程序在这个python程序执行完毕前是得不到执行的(一执行就会出错返回)。所以我们可以写入.bashrc:
alias&python='run-one&python'&
(别忘source激活哦)
看,我通过将第一个python挂到后台了,后面的python完全执行不起来。除非前一个python结束。(所以其他小伙伴可能以为自己的程序出问题了,然后emmm陷入了无尽的困惑)
【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点热点聚焦热点热点
24H热文一周话题本月最赞
CTO专属活动
精选博文论坛热帖下载排行
本书是讲解C++语言程序设计的优秀教程。全书围绕C++语言来组织,开始章节介绍编程的普通感念,接下来详细介绍C++中的继承、多态、异常处理...
订阅51CTO邮刊&p&推荐几个我办公常用的工具,对提高效率很有帮助,尤其是Excel和PPT使用频繁的童鞋,有免费有付费有商业。&/p&&h2&&b&1、&/b& &b&Power Map&/b&&/h2&&p&这个在知乎上已经安利很多次了,微软官方出版的一个3D数据地图插件,包含在线地图+在线演示+制作视频等各项功能。可以基于Bing地图绘制可视化三维列,包括气泡、饼图,热图和地区的数据,之前的一次回答中已经演示过了。&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&李启方:怎么在 Excel 上做数据地图?&/a&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-eb6f0c6e45b4e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1000& data-rawheight=&493& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic4.zhimg.com/50/v2-eb6f0c6e45b4e_r.jpg&&&/figure&&h2&&b&2、&/b& &b&方方格子Excel插件&/b&&/h2&&p&这就是一个Excel偷懒的工具,将一些常用的需要写函数或写宏的功能给封装成现成的按钮。比如:过滤文本、删除文本、汇总拆分、重复值工具、数据对比、高级排序、颜色排序、合并单元格排序等等。提供了大量常用宏及函数。&/p&&p&日常的表制作,配上这个插件可以大大提高工作效率。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-cd8f6ca54cfbb3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2190& data-rawheight=&488& class=&origin_image zh-lightbox-thumb& width=&2190& data-original=&https://pic2.zhimg.com/50/v2-cd8f6ca54cfbb3_r.jpg&&&/figure&&p&① 一键删除空格&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-dbf06c6fd6ad_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1776& data-rawheight=&986& class=&origin_image zh-lightbox-thumb& width=&1776& data-original=&https://pic1.zhimg.com/50/v2-dbf06c6fd6ad_r.jpg&&&/figure&&p&② 提取数字文字英文&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-9b0a9b802f5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1770& data-rawheight=&964& class=&origin_image zh-lightbox-thumb& width=&1770& data-original=&https://pic4.zhimg.com/50/v2-9b0a9b802f5_r.jpg&&&/figure&&h2&&b&3、&/b& &b&Excel图表插件-EasyChart&/b&&/h2&&p&EasyCharts是Excel的图表插件,能一键生成Excel未提供的图表,修改成R 、Python、Matlab的风格图表,像下图就有一种R既视感。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-1e0c3a19ec126cc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1366& data-rawheight=&724& class=&origin_image zh-lightbox-thumb& width=&1366& data-original=&https://pic2.zhimg.com/50/v2-1e0c3a19ec126cc_r.jpg&&&/figure&&p&(图片源自网络)&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-4ca721cf11f2f21a16d0b4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&605& data-rawheight=&1193& class=&origin_image zh-lightbox-thumb& width=&605& data-original=&https://pic4.zhimg.com/50/v2-4ca721cf11f2f21a16d0b4_r.jpg&&&/figure&&p&(图片源自网络)&/p&&h2&&b&4、&a href=&//link.zhihu.com/?target=http%3A//www.finereport.com/%3Futm_source%3Dmedia%26utm_medium%3Dzhihu& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FineReport&/a&&/b&&/h2&&p&这是一个商用报表软件,主要应用于企业级的办公上。比如业务系统报表,数据分析报表。可集成在OA,ERP,CRM内。主要两大核心是填报和数据展示。懂点java的话可以做开发,比如我同事用这个开发了一个公司内部的考试系统。&/p&&p&主要用途还是做报表,大数据量的报表和可视化。&/p&&p&1、 类似excel制作报表,不用数据透视表,也不要写VBA,功能都是封装好的&/p&&p&2、 填报功能,收集数据审核入(数据)库简直无压力&/p&&p&3、 Dashboard(决策报表),表格立马变高大上的“驾驶舱”&/p&&p&4、 移动端报表随时随地看&/p&&p&制作界面大概长这样,类似excel,有号称:&/p&&blockquote&工作用小屏,决策用大屏。&br&办公用微软,经营用帆软。&/blockquote&&p&官方出过一篇介绍文章:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&你用过Excel,却不知还有一款神器“FineReport”&/a&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-e94c8394eb4ecdc25702fba_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2536& data-rawheight=&1262& class=&origin_image zh-lightbox-thumb& width=&2536& data-original=&https://pic1.zhimg.com/50/v2-e94c8394eb4ecdc25702fba_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/50/v2-dd85cf6d7b80dbb57a6d8ea47b31a1af_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1152& data-rawheight=&648& class=&origin_image zh-lightbox-thumb& width=&1152& data-original=&https://pic1.zhimg.com/50/v2-dd85cf6d7b80dbb57a6d8ea47b31a1af_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/50/v2-2bbf8e35b1af9bc11375_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2044& data-rawheight=&984& class=&origin_image zh-lightbox-thumb& width=&2044& data-original=&https://pic3.zhimg.com/50/v2-2bbf8e35b1af9bc11375_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/50/v2-d835e89c6ea474da2bc3c085503bff83_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1268& data-rawheight=&714& class=&origin_image zh-lightbox-thumb& width=&1268& data-original=&https://pic3.zhimg.com/50/v2-d835e89c6ea474da2bc3c085503bff83_r.jpg&&&/figure&&h2&&b&5、 Nordri Tools&/b&&/h2&&p&一款非常火的PPT插件,可以用来拓展PowerPoint软件自身难以实现的功能,可能经常做PPT的人都知道。对于很多新用户或者小白用户,会有相见恨晚的感觉。如一键统一字体、段落;批量删减文本;图文一键对齐;PPT配色自动载入;PPT长途。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-0fa140ee57_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1695& data-rawheight=&439& class=&origin_image zh-lightbox-thumb& width=&1695& data-original=&https://pic4.zhimg.com/50/v2-0fa140ee57_r.jpg&&&/figure&&p&&b&一键统一PPT中的字体和段落:&/b&能全文档统一中/英文字体;全文档统一行距/段前/段后距(不用再一篇一篇改字体了:)&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-f1afce7bf00b7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&737& data-rawheight=&439& class=&origin_image zh-lightbox-thumb& width=&737& data-original=&https://pic4.zhimg.com/50/v2-f1afce7bf00b7_r.jpg&&&/figure&&p&(图片源自网络)&/p&&p&&b&矩阵复制:&/b&通过一系列参数化设置,帮助实现一个元素在ppt中的快速阵列复制&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-a0c48ab3ea84c4196ca0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&737& data-rawheight=&415& class=&origin_image zh-lightbox-thumb& width=&737& data-original=&https://pic2.zhimg.com/50/v2-a0c48ab3ea84c4196ca0_r.jpg&&&/figure&&p&(图片源自网络)&/p&&h2&&b&6、&/b& &a href=&//link.zhihu.com/?target=http%3A//iconfont.cn/plus/user/detail%3Fuid%3D41718& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&阿里巴巴矢量图icon&/a&&/h2&&p&这个我做PPT的时候常用,一些icon的素材,上面提的很多了,不过貌似这个网站美工用的会多一些。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2340& data-rawheight=&1099& class=&origin_image zh-lightbox-thumb& width=&2340& data-original=&https://pic4.zhimg.com/50/v2-b_r.jpg&&&/figure&&p&下载时可选择颜色、大小和文件格式&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-a908f7f33a68fb89b5a3089d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1236& data-rawheight=&753& class=&origin_image zh-lightbox-thumb& width=&1236& data-original=&https://pic1.zhimg.com/50/v2-a908f7f33a68fb89b5a3089d_r.jpg&&&/figure&&h2&7、 &a href=&//link.zhihu.com/?target=https%3A//www.processon.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Process on&/a&&/h2&&p&ProcessOn是一个在线制作流程图的软件,包括思维导图等。风格很适合用在PPT中,勾画复杂的模型,基本上是0难度上手。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-81c2e8467_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1528& data-rawheight=&763& class=&origin_image zh-lightbox-thumb& width=&1528& data-original=&https://pic3.zhimg.com/50/v2-81c2e8467_r.jpg&&&/figure&&p&(图片源自网络)&/p&&h2&&b&8、&/b& &b&gif录制/剪辑工具Screen to GIF&/b&&/h2&&p&&b&下载地址:&/b&&a href=&//link.zhihu.com/?target=https%3A//pan.baidu.com/s/13m4xHk4NRn9DD3QNziLj_A& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&pan.baidu.com/s/13m4xHk&/span&&span class=&invisible&&4NRn9DD3QNziLj_A&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&这个工具小而美,一共2M,点击开始-点击结束-保存文件,可以很快速的录制动图并调整文件大小。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-6b6ceeb0f7a23b355a5451_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&978& data-rawheight=&429& class=&origin_image zh-lightbox-thumb& width=&978& data-original=&https://pic1.zhimg.com/50/v2-6b6ceeb0f7a23b355a5451_r.jpg&&&/figure&
推荐几个我办公常用的工具,对提高效率很有帮助,尤其是Excel和PPT使用频繁的童鞋,有免费有付费有商业。1、 Power Map这个在知乎上已经安利很多次了,微软官方出版的一个3D数据地图插件,包含在线地图+在线演示+制作视频等各项功能。可以基于Bing地图绘制…
&figure&&img src=&https://pic4.zhimg.com/v2-cbbef4ecd3befd884cfeff8_b.jpg& data-rawwidth=&600& data-rawheight=&357& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/v2-cbbef4ecd3befd884cfeff8_r.jpg&&&/figure&&p&不懂TCP协议,无论是网络工程师、还是软件工程师,都是不可饶恕的,只要看我花多大力气回答TCP协议,就可以推算出这个协议是多么重要。这个专场按照回答的先后次序整理,希望还没怎么重视TCP协议的同学补补课。&/p&&p&&br&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&三次握手的第三次握手发送ACK能携带数据吗?如何携带?怎样体现的呢?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP 和 HTTP 的区别和联系是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&关于socket的困惑???&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&计算机是如何聊天的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么使用tcpdump观察三次握手的过程,最后一次握手后,ack变为1而不是y+1?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&在tcp链接的释放过程中,由于存在TIME-WAIT阶段,会影响其他程序在该端口建立tcp连接吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP协议存在那些缺陷?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么TCP的MSS协商没有按照小的来?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp重传机制 对端滑动窗口一直为0时如何处理?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP中已有SO_KEEPALIVE选项,为什么还要在应用层加入心跳包机制?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP连接建立后,下行和上行经过的路由器是一样的吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp协议握手为什要各随机一个数字并加一?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP拥塞控制的问题?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP连接中a连b和b连a是一码事吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP建立连接过程为什么会有4个包?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp首部只有端口号没有ip地址,那么网络层怎么知道目的ip地址的呢?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP、UDP与分组交换、电路交换之间的关系?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP面向字节流和报文段的关系是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp 握手后向公网发送包,与mss大小不符合,丢失问题?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么TCP编程里要设计成分为欢迎套接字和连接套接字?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP 协议下 socket 有可能丢包吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP链接之间的网络物理断开了然后有连上,这个TCP链接是否断开?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&《TCP/IP详解 卷1:协议》哪些章节需要重点阅读?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP这门技术有什么用?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&怎么理解TCP是面向连接的,HTTP基于TCP却是无连接的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&UDP广播和TCP链接传送数据,哪个更节省带宽?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&怎么理解TCP的面向连接和UDP的无连接(不面向连接)?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP 协议到底在讲什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp中的mss是536?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP负载怎么协商?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP中断可以用3次挥手吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么在第一次挥手的时候发送的是FIN+ACK而不是FIN?&/a&&br&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp滑动窗口的发送窗口和接收窗口的说法正确吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp状态变迁图的疑问:listen怎么转换到syn_sent?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP协议中,在建立连接的时候ISN序号分配问题?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP/IP协议中,一端要给另一端发送数据,是先进行ARP请求和应答,还是先建立tcp连接?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp 编程中,connect 连接成功的标准是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp 的可靠性到底指的是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP 为什么是三次握手,为什么不是两次或四次?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP流量控制中的滑动窗口大小、TCP字段中16位窗口大小、MTU、MSS、缓存区大小有什么关系?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP快速重传为什么是三次冗余ack,这个三次是怎么定下来的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp中两台设备在同时建立连接时,为什么需两次发送自己的SYN?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP中使用PPP在数据链路层建立连接的意义是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&如何改进TCP,甚至重新设计TCP/IP,才可以完全杜绝SYN Flood等安全问题?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP如何保持长连接,并识别不同请求的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么tcp连接的传输速度慢,断开重新连接后,传输速度就变快了呢?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP协议中的端口具体指的是什么,为什么要有端口,你是怎么理解的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&TCP四次分手中,主动关闭方最后为什么要等待2MSL之后才关闭连接?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&tcp协议可靠吗? 怎么知道自己发出的消息已经被是否被成功接收?&/a&&/p&
不懂TCP协议,无论是网络工程师、还是软件工程师,都是不可饶恕的,只要看我花多大力气回答TCP协议,就可以推算出这个协议是多么重要。这个专场按照回答的先后次序整理,希望还没怎么重视TCP协议的同学补补课。
&figure&&img src=&https://pic3.zhimg.com/v2-8f87a623cc_b.jpg& data-rawwidth=&2048& data-rawheight=&1152& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&https://pic3.zhimg.com/v2-8f87a623cc_r.jpg&&&/figure&&p&&b&选自Github&/b&&/p&&p&&b&机器之心编译&/b&&/p&&p&&b&参与:蒋思源、刘晓坤&/b&&/p&&blockquote&本文从最基本的依赖项开始,依次配置了 VS 2015、Anaconda 4.4.0、CUDA 8.0.61 和 cuDNN v5.1 等基本环境,然后再从 Keras 出发安装 Theano、TensorFlow 和 CNTK 以作为其后端。在完成配置深度学习框架后,本文分别利用这三个框架作为 Keras 后端在 CPU 和 GPU 上训练了一个标准的卷积神经网络,完成该简单的卷积网络也就意味着我们完成了深度学习环境的配置。&/blockquote&&ul&&li&从零开始:深度学习软件环境安装指南(Ubuntu)&/li&&li&本文GitHub地址:&a href=&https://link.zhihu.com/?target=https%3A//github.com/philferriere/dlwin& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/philferriere&/span&&span class=&invisible&&/dlwin&/span&&span class=&ellipsis&&&/span&&/a&&/li&&/ul&&p&该配置版本最后更新的日期是今年七月,该更新版本允许本地使用 3 个不同的 GPU 加速后端,并添加对 MKL BLAS 库的支持。&/p&&p&目前有很多帮助我们在 Linux 或 Mac OS 上构建深度学习(DL)环境的指导文章,但很少有文章完整地叙述如何高效地在 Windows 10 上配置深度学习开发环境。此外,很多开发者安装 Windows 和 Ubuntu 双系统或在 Windows 上安装虚拟机以配置深度学习环境,但对于入门者来说,我们更希望还是直接使用 Windows 直接配置深度学习环境。因此,本文作者 Phil Ferriere 在 GitHub 上发布了该教程,他希望能从最基本的环境变量配置开始一步步搭建 Keras 深度学习开发环境。&/p&&p&如果读者希望在 Windows 10 上配置深度学习环境,那么本文将为大家提供很多有利的信息。&/p&&p&&b&依赖项&/b&&/p&&p&下面是我们将在 Windows 10(Version 1607 OS Build )上配置深度学习环境所需要的工具和软件包:&/p&&ol&&li&Visual Studio 2015 Community Edition Update 3 w. Windows Kit 10.0.10240.0:用于其 C/C++编译器(而不是 IDE)和 SDK,选择该确定的版本是因为 CUDA 8.0.61 所支持的 Windows 编译器。&/li&&li&Anaconda (64-bit) w. Python 3.6 (Anaconda3-4.4.0) [for Tensorflow support] or Python 2.7 (Anaconda2-4.4.0) [no Tensorflow support] with MKL:Anaconda 是一个开源的 Python 发行版本,其包含了 conda、Python、NumPy、SciPy 等 180 多个科学包及其依赖项,是一个集成开发环境。MKL 可以利用 CPU 加速许多线性代数运算。&/li&&li&CUDA 8.0.61 (64-bit):CUDA 是一种由 NVIDIA 推出的通用并行计算架构,该架构使 GPU 能够解决复杂的计算问题,该软件包能提供 GPU 数学库、显卡驱动和 CUDA 编译器等。&/li&&li&cuDNN v5.1 (Jan 20, 2017) for CUDA 8.0:用于加速卷积神经网络的运算。&/li&&li&Keras 2.0.5 with three different backends: Theano 0.9.0, Tensorflow-gpu 1.2.0, and CNTK 2.0:Keras 以 Theano、Tensorflow 或 CNTK 等框架为后端,并提供深度学习高级 API。使用不同的后端在张量数学计算等方面会有不同的效果。&/li&&/ol&&p&&b&硬件&/b&&/p&&ul&&li&Dell Precision T7900, 64GB RAM:Intel Xeon E5-2630 v4 @ 2.20 GHz (1 processor, 10 cores total, 20 logical processors)&/li&&li&NVIDIA GeForce Titan X, 12GB RAM:Driver version: 372.90 / Win 10 64&/li&&/ul&&p&&b&安装步骤&/b&&/p&&p&我们可能喜欢让所有的工具包和软件包在一个根目录下(如 e:\toolkits.win),所以在下文只要看到以 e:\toolkits.win 开头的路径,那么我们可能就需要小心不要覆盖或随意更改必要的软件包目录。&/p&&ul&&li&Visual Studio 2015 Community Edition Update 3 w. Windows Kit 10.0.10240.0&/li&&li&下载地址:&a href=&https://link.zhihu.com/?target=https%3A//www.visualstudio.com/vs/older-downloads& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&visualstudio.com/vs/old&/span&&span class=&invisible&&er-downloads&/span&&span class=&ellipsis&&&/span&&/a&&/li&&/ul&&p&运行下载的软件包以安装 Visual Studio,可能我们还需要做一些额外的配置:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e6fa820b03a7ed0aae6355_b.jpg& data-caption=&& data-rawwidth=&508& data-rawheight=&717& class=&origin_image zh-lightbox-thumb& width=&508& data-original=&https://pic3.zhimg.com/v2-e6fa820b03a7ed0aae6355_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-be4b3c6ce57c675a0c3c_b.jpg& data-caption=&& data-rawwidth=&515& data-rawheight=&716& class=&origin_image zh-lightbox-thumb& width=&515& data-original=&https://pic1.zhimg.com/v2-be4b3c6ce57c675a0c3c_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-d5efbddc5a1e737ab8ceb0e_b.jpg& data-caption=&& data-rawwidth=&513& data-rawheight=&712& class=&origin_image zh-lightbox-thumb& width=&513& data-original=&https://pic4.zhimg.com/v2-d5efbddc5a1e737ab8ceb0e_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-cacd70bded03c061cd129dcc6b5bb8e9_b.jpg& data-caption=&& data-rawwidth=&517& data-rawheight=&722& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&https://pic3.zhimg.com/v2-cacd70bded03c061cd129dcc6b5bb8e9_r.jpg&&&/figure&&ul&&li&基于我们安装 VS 2015 的地址,需要将 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin 添加到 PATH 中。&/li&&li&定义系统环境变量(sysenv variable)INCLUDE 的值为 C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt&/li&&li&定义系统环境变量(sysenv variable)LIB 的值为 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64&/li&&/ul&&p&&b&Anaconda 4.4.0 (64-bit) (Python 3.6 TF support / Python 2.7 no TF support))&/b&&/p&&p&本教程最初使用的是 Python 2.7,而随着 TensorFlow 可作为 Keras 的后端,我们决定使用 Python 3.6 作为默认配置。因此,根据我们配置的偏好,可以设置 e:\toolkits.win\anaconda3-4.4.0 或 e:\toolkits.win\anaconda2-4.4.0 为安装 Anaconda 的文件夹名。&/p&&ul&&li&Python 3.6 版本的 Anaconda 下载地址:&a href=&https://link.zhihu.com/?target=https%3A//repo.continuum.io/archive/Anaconda3-4.4.0-Windows-x86_64.exe& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&repo.continuum.io/archi&/span&&span class=&invisible&&ve/Anaconda3-4.4.0-Windows-x86_64.exe&/span&&span class=&ellipsis&&&/span&&/a&&/li&&li&Python 2.7 版本的 Anaconda 下载地址:&a href=&https://link.zhihu.com/?target=https%3A//repo.continuum.io/archive/Anaconda2-4.4.0-Windows-x86_64.exe& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&repo.continuum.io/archi&/span&&span class=&invisible&&ve/Anaconda2-4.4.0-Windows-x86_64.exe&/span&&span class=&ellipsis&&&/span&&/a&&/li&&/ul&&figure&&img src=&https://pic3.zhimg.com/v2-030ee1d9aa0de9247b2aca9a_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&365& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-030ee1d9aa0de9247b2aca9a_r.jpg&&&/figure&&p&运行安装程序完成安装:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-51f66fb35f80bc348d3001bcbc59fbcf_b.jpg& data-caption=&& data-rawwidth=&506& data-rawheight=&790& class=&origin_image zh-lightbox-thumb& width=&506& data-original=&https://pic3.zhimg.com/v2-51f66fb35f80bc348d3001bcbc59fbcf_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-fc32da0a4a047eeddda57ac_b.jpg& data-caption=&& data-rawwidth=&507& data-rawheight=&396& class=&origin_image zh-lightbox-thumb& width=&507& data-original=&https://pic4.zhimg.com/v2-fc32da0a4a047eeddda57ac_r.jpg&&&/figure&&p&如上,本教程选择了第二个选项,但不一定是最好的。&/p&&p&定义一下变量并更新 PATH:&/p&&ul&&li&定义系统环境(sysenv variable)变量 PYTHON_HOME 的值为 e:\toolkits.win\anaconda3-4.4.0&/li&&li&添加 %PYTHON_HOME%, %PYTHON_HOME%\Scripts 和 %PYTHON_HOME%\Library\bin 到 PATH 中&/li&&/ul&&p&&b&创建 dlwin36 conda 环境&/b&&/p&&p&在安装 Anaconda 后,打开 Windows 命令窗口并执行:&/p&&p&#使用以下命令行创建环境&/p&&figure&&img src=&https://pic3.zhimg.com/v2-1f008a644caf2d30113c1_b.jpg& data-caption=&& data-rawwidth=&715& data-rawheight=&327& class=&origin_image zh-lightbox-thumb& width=&715& data-original=&https://pic3.zhimg.com/v2-1f008a644caf2d30113c1_r.jpg&&&/figure&&p&如上所示,使用 active dlwin36 命令激活这个新的环境。如果已经有了旧的 dlwin36 环境,可以先用 conda env remove -n dlwin36 命令删除。既然打算使用 GPU,为什么还要安装 CPU 优化的线性代数库如 MKL 呢?在我们的设置中,大多数深度学习都是由 GPU 承担的,这并没错,但 CPU 也不是无所事事。基于图像的 Kaggle 竞赛一个重要部分是数据增强。如此看来,数据增强是通过转换原始训练样本(利用图像处理算子)获得额外输入样本(即更多的训练图像)的过程。基本的转换比如下采样和均值归 0 的归一化也是必需的。如果你觉得这样太冒险,可以试试额外的预处理增强(噪声消除、直方图均化等等)。当然也可以用 GPU 处理并把结果保存到文件中。然而在实践过程中,这些计算通常都是在 CPU 上平行执行的,而 GPU 正忙于学习深度神经网络的权重,况且增强数据是用完即弃的。因此,我们强烈推荐安装 MKL,而 Theanos 用 BLAS 库更好。&/p&&p&&b&CUDA 8.0.61 (64-bit)&/b&&/p&&p&从英伟达网站下载 CUDA 8.0 (64-bit):&a href=&https://link.zhihu.com/?target=https%3A//developer.nvidia.com/cuda-downloads& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&developer.nvidia.com/cu&/span&&span class=&invisible&&da-downloads&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&选择合适的操作系统:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-eb8e3fa8607fc6bdf544e_b.jpg& data-caption=&& data-rawwidth=&613& data-rawheight=&227& class=&origin_image zh-lightbox-thumb& width=&613& data-original=&https://pic4.zhimg.com/v2-eb8e3fa8607fc6bdf544e_r.jpg&&&/figure&&p&下载安装包:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-708c43cb54e997fa89d7dbe6a25b8c1d_b.jpg& data-caption=&& data-rawwidth=&612& data-rawheight=&274& class=&origin_image zh-lightbox-thumb& width=&612& data-original=&https://pic2.zhimg.com/v2-708c43cb54e997fa89d7dbe6a25b8c1d_r.jpg&&&/figure&&p&运行安装包,安装文件到 e:\toolkits.win\cuda-8.0.61 中:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e82cda6a540aebc0c2fbbbf985c45073_b.jpg& data-caption=&& data-rawwidth=&605& data-rawheight=&915& class=&origin_image zh-lightbox-thumb& width=&605& data-original=&https://pic1.zhimg.com/v2-e82cda6a540aebc0c2fbbbf985c45073_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-2f50d8d374ef01804aea_b.jpg& data-caption=&& data-rawwidth=&602& data-rawheight=&908& class=&origin_image zh-lightbox-thumb& width=&602& data-original=&https://pic3.zhimg.com/v2-2f50d8d374ef01804aea_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-b6a7fbc44ede_b.jpg& data-caption=&& data-rawwidth=&601& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&601& data-original=&https://pic3.zhimg.com/v2-b6a7fbc44ede_r.jpg&&&/figure&&p&完成安装后,安装包应该创建了一个名为 CUDA_PATH 的系统环境变量(sysenv variable),并且已经添加了%CUDA_PATH%\bin 和 %CUDA_PATH%\libnvvp 到 PATH 中。检查是否真正添加了,若 CUDA 环境变量因为一些原因出错了,那么完成下面两个步骤:&/p&&ul&&li&定义名为 CUDA_PATH 的系统环境变量的值为 e:\toolkits.win\cuda-8.0.61&/li&&li&添加%CUDA_PATH%\bin 和 %CUDA_PATH%\libnvvp 到 PATH 中&/li&&/ul&&p&&b&cuDNN v5.1 (Jan 20, 2017) for CUDA 8.0&/b&&/p&&p&根据英伟达官网「cuDNN 为标准的运算如前向和反向卷积、池化、归一化和激活层等提供高度调优的实现」,它是为卷积神经网络和深度学习设计的一款加速方案。&/p&&p&cuDNN 的下载地址:&a href=&https://link.zhihu.com/?target=https%3A//developer.nvidia.com/rdp/cudnn-download& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&developer.nvidia.com/rd&/span&&span class=&invisible&&p/cudnn-download&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&我们需要选择符合 CUDA 版本和 Window 10 编译器的 cuDNN 软件包,一般来说,cuDNN 5.1 可以支持 CUDA 8.0 和 Windows 10。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2adac917db579a7cf27bb_b.jpg& data-caption=&& data-rawwidth=&552& data-rawheight=&675& class=&origin_image zh-lightbox-thumb& width=&552& data-original=&https://pic4.zhimg.com/v2-2adac917db579a7cf27bb_r.jpg&&&/figure&&p&&br&&/p&&p&下载的 ZIP 文件包含三个目录(bin、include、lib),抽取这三个的文件夹到%CUDA_PATH% 中。&/p&&p&&b&安装 Keras 2.0.5 和 Theano0.9.0 与 libgpuarray&/b&&/p&&p&运行以下命令安装 libgpuarray 0.6.2,即 Theano 0.9.0 唯一的稳定版:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b101a724badaf2b1998a_b.jpg& data-caption=&& data-rawwidth=&733& data-rawheight=&304& class=&origin_image zh-lightbox-thumb& width=&733& data-original=&https://pic2.zhimg.com/v2-b101a724badaf2b1998a_r.jpg&&&/figure&&p&输入以下命令安装 Keras 和 Theano:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8cf2d38ac0688ac10fdbcb_b.jpg& data-caption=&& data-rawwidth=&708& data-rawheight=&357& class=&origin_image zh-lightbox-thumb& width=&708& data-original=&https://pic3.zhimg.com/v2-8cf2d38ac0688ac10fdbcb_r.jpg&&&/figure&&p&&b&安装 CNTK 2.0 后端&/b&&/p&&p&根据 CNTK 安装文档,我们可以使用以下 pip 命令行安装 CNTK:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-11d86fae0c2abdedb5c60_b.jpg& data-caption=&& data-rawwidth=&711& data-rawheight=&357& class=&origin_image zh-lightbox-thumb& width=&711& data-original=&https://pic4.zhimg.com/v2-11d86fae0c2abdedb5c60_r.jpg&&&/figure&&p&该安装将导致在 conda 环境目录下额外安装 CUDA 和 cuDNN DLLs:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-75b735fb9f_b.jpg& data-caption=&& data-rawwidth=&699& data-rawheight=&325& class=&origin_image zh-lightbox-thumb& width=&699& data-original=&https://pic2.zhimg.com/v2-75b735fb9f_r.jpg&&&/figure&&p&这个问题并不是因为浪费硬盘空间,而是安装的 cuDNN 版本和我们安装在 c:\toolkits\cuda-8.0.61 下的 cuDNN 版本不同,因为在 conda 环境目录下的 DLL 将首先加载,所以我们需要这些 DLL 移除出%PATH% 目录:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-4ac1f68b7ec3a1b7cdc4c81_b.jpg& data-caption=&& data-rawwidth=&726& data-rawheight=&215& class=&origin_image zh-lightbox-thumb& width=&726& data-original=&https://pic2.zhimg.com/v2-4ac1f68b7ec3a1b7cdc4c81_r.jpg&&&/figure&&p&&b&安装 TensorFlow-GPU 1.2.0 后端&/b&&/p&&p&运行以下命令行使用 pip 安装 TensorFlow:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-cacd33d80decbb77e82d350_b.jpg& data-caption=&& data-rawwidth=&710& data-rawheight=&830& class=&origin_image zh-lightbox-thumb& width=&710& data-original=&https://pic2.zhimg.com/v2-cacd33d80decbb77e82d350_r.jpg&&&/figure&&p&&b&使用 conda 检查安装的软件包&/b&&/p&&p&完成以上安装和配置后,我们应该在 dlwin36 conda 环境中看到以下软件包列表:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-aa5a794a6e71d_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&773& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-aa5a794a6e71d_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-e37e50cc6e8a811cc8b0cf072ea08c7a_b.jpg& data-caption=&& data-rawwidth=&503& data-rawheight=&703& class=&origin_image zh-lightbox-thumb& width=&503& data-original=&https://pic3.zhimg.com/v2-e37e50cc6e8a811cc8b0cf072ea08c7a_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-617be652a1fddbaddc0713d8_b.jpg& data-caption=&& data-rawwidth=&507& data-rawheight=&489& class=&origin_image zh-lightbox-thumb& width=&507& data-original=&https://pic4.zhimg.com/v2-617be652a1fddbaddc0713d8_r.jpg&&&/figure&&p&为了快速检查上述三个后端安装的效果,依次运行一下命令行分别检查 Theano、TensorFlow 和 CNTK 导入情况:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a380cf1a04752fefb6fb2bc14f70fd67_b.jpg& data-caption=&& data-rawwidth=&717& data-rawheight=&414& class=&origin_image zh-lightbox-thumb& width=&717& data-original=&https://pic3.zhimg.com/v2-a380cf1a04752fefb6fb2bc14f70fd67_r.jpg&&&/figure&&p&&b&验证 Theano 的安装&/b&&/p&&p&因为 Theano 是安装 Keras 时自动安装的,为了快速地在 CPU 模式、GPU 模式和带 cuDNN 的 GPU 模式之间转换,我们需要创建以下三个系统环境变量(sysenv variable):&/p&&ul&&li&系统环境变量 THEANO_FLAGS_CPU 的值定义为:floatX=float32,device=cpu&/li&&li&系统环境变量 THEANO_FLAGS_GPU 的值定义为:floatX=float32,device=cuda0,dnn.enabled=False,gpuarray.preallocate=0.8&/li&&li&系统环境变量 THEANO_FLAGS_GPU_DNN 的值定义为:floatX=float32,device=cuda0,optimizer_including=cudnn,gpuarray.preallocate=0.8,dnn.conv.algo_bwd_filter=deterministic,dnn.conv.algo_bwd_data=deterministic,dnn.include_path=e:/toolkits.win/cuda-8.0.61/include,dnn.library_path=e:/toolkits.win/cuda-8.0.61/lib/x64&/li&&/ul&&p&现在,我们能直接使用 THEANO_FLAGS_CPU、THEANO_FLAGS_GPU 或 THEANO_FLAGS_GPU_DNN 直接设置 Theano 使用 CPU、GPU 还是 GPU+cuDNN。我们可以使用以下命令行验证这些变量是否成功加入环境中:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e9abca6df1c3bc_b.jpg& data-caption=&& data-rawwidth=&691& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&691& data-original=&https://pic4.zhimg.com/v2-e9abca6df1c3bc_r.jpg&&&/figure&&p&更多具体的 Theano 验证代码与命令请查看原文。&/p&&p&&b&检查系统环境变量&/b&&/p&&p&现在,不论 dlwin36 conda 环境什么时候激活,PATH 环境变量应该需要看起来如下面列表一样:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-5b19e91e9f5e25ed622f12e_b.jpg& data-caption=&& data-rawwidth=&460& data-rawheight=&430& class=&origin_image zh-lightbox-thumb& width=&460& data-original=&https://pic1.zhimg.com/v2-5b19e91e9f5e25ed622f12e_r.jpg&&&/figure&&p&&b&使用 Keras 验证 GPU+cuDNN 的安装&/b&&/p&&p&我们可以使用 Keras 在 MNIST 数据集上训练简单的卷积神经网络(convnet)而验证 GPU 的 cuDNN 是否正确安装,该文件名为 mnist_cnn.py,其可以在 Keras 案例中找到。该卷积神经网络的代码如下:&/p&&p&Keras案例地址:&a href=&https://link.zhihu.com/?target=https%3A//github.com/fchollet/keras/blob/2.0.5/examples/mnist_cnn.py& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/fchollet/ker&/span&&span class=&invisible&&as/blob/2.0.5/examples/mnist_cnn.py&/span&&span class=&ellipsis&&&/span&&/a&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-d0a80bac89e4a19c0eb9_b.jpg& data-caption=&& data-rawwidth=&687& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&687& data-original=&https://pic2.zhimg.com/v2-d0a80bac89e4a19c0eb9_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-e305add6ecd4ff219d21_b.jpg& data-caption=&& data-rawwidth=&695& data-rawheight=&303& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&https://pic1.zhimg.com/v2-e305add6ecd4ff219d21_r.jpg&&&/figure&&p&1. 使用带 Theano 后端的 Keras&/p&&p&为了有一个能进行对比的基线模型,首先我们使用 Theano 后端和 CPU 训练简单的卷积神经网络:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-afc4b53c77f402ce57d27b_b.jpg& data-caption=&& data-rawwidth=&685& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&685& data-original=&https://pic3.zhimg.com/v2-afc4b53c77f402ce57d27b_r.jpg&&&/figure&&p&我们现在使用以下命令行利用带 Theano 的后端的 Keras 在 GPU 和 cuDNN 环境下训练卷积神经网络:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c22a81f720ee45e4c2a58_b.jpg& data-caption=&& data-rawwidth=&674& data-rawheight=&752& class=&origin_image zh-lightbox-thumb& width=&674& data-original=&https://pic1.zhimg.com/v2-c22a81f720ee45e4c2a58_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-02ad42f27dfedb1681a8_b.jpg& data-caption=&& data-rawwidth=&688& data-rawheight=&244& class=&origin_image zh-lightbox-thumb& width=&688& data-original=&https://pic4.zhimg.com/v2-02ad42f27dfedb1681a8_r.jpg&&&/figure&&p&我们看到每一个 Epoch 的训练时间只需要 16 秒,相对于使用 CPU 要 250 秒左右取得了很大的提高(在同一个批量大小的情况下)。&/p&&p&2. 使用 TensorFlow 后端的 Keras&/p&&p&为了激活和测试 TensorFlow 后端,我们需要使用以下命令行:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-897ff210faababb121b18_b.jpg& data-caption=&& data-rawwidth=&673& data-rawheight=&728& class=&origin_image zh-lightbox-thumb& width=&673& data-original=&https://pic2.zhimg.com/v2-897ff210faababb121b18_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-de9fc658fdb_b.jpg& data-caption=&& data-rawwidth=&668& data-rawheight=&575& class=&origin_image zh-lightbox-thumb& width=&668& data-original=&https://pic1.zhimg.com/v2-de9fc658fdb_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-da46f39c4644_b.jpg& data-caption=&& data-rawwidth=&668& data-rawheight=&780& class=&origin_image zh-lightbox-thumb& width=&668& data-original=&https://pic3.zhimg.com/v2-da46f39c4644_r.jpg&&&/figure&&p&我们看到使用 TensorFlow 后端要比 Theano 后端在该任务上快 3 倍左右,它们都是用了 GPU 和 cuDNN 加速。这可能是因为在该测试中它们有相同的通道等级(channel ordering),但实际上两个平台在这一点是不一样的。因此,程序可能强制 Theano 后端重新排序数据而造成性能上的差异。但在该案例下,TensorFlow 在 GPU 上的负载一直没有超过 70%。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-de7ef508ea968bac808a_b.jpg& data-caption=&& data-rawwidth=&394& data-rawheight=&495& class=&content_image& width=&394&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&3. 使用 CNTK 后端的 Keras&/p&&p&为了激活和测试 CNTK 后算,我们需要使用以下命令行:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-133f2a633bd_b.jpg& data-caption=&& data-rawwidth=&666& data-rawheight=&305& class=&origin_image zh-lightbox-thumb& width=&666& data-original=&https://pic1.zhimg.com/v2-133f2a633bd_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-2d241fa1ad6f9aae7aedcc_b.jpg& data-caption=&& data-rawwidth=&670& data-rawheight=&779& class=&origin_image zh-lightbox-thumb& width=&670& data-original=&https://pic2.zhimg.com/v2-2d241fa1ad6f9aae7aedcc_r.jpg&&&/figure&&p&在具体的试验中,CNTK 同样也十分快速,并且 GPU 负载达到了 80%。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ab34fd4e7964_b.jpg& data-caption=&& data-rawwidth=&394& data-rawheight=&495& class=&content_image& width=&394&&&/figure&&p&原文链接:&a href=&https://link.zhihu.com/?target=https%3A//github.com/philferriere/dlwin& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/philferriere&/span&&span class=&invisible&&/dlwin&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&本文为机器之心编译,转载请联系本公众号获得授权。&/b&&/p&&p&&/p&&p&&/p&
选自Github机器之心编译参与:蒋思源、刘晓坤本文从最基本的依赖项开始,依次配置了 VS 2015、Anaconda 4.4.0、CUDA 8.0.61 和 cuDNN v5.1 等基本环境,然后再从 Keras 出发安装 Theano、TensorFlow 和 CNTK 以作为其后端。在完成配置深度学习框架后,本文…
&figure&&img src=&https://pic3.zhimg.com/50/v2-abd7c8934dfd38b0ee0a_b.jpg& data-caption=&& data-rawwidth=&325& data-rawheight=&132& class=&content_image& width=&325&&&/figure&&p&分享一下我的读研经历吧,希望对你有帮助。&/p&&p&2017,我研三,是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三月份经历了阿里五次面试,四月顺利收到实习offer。然后五月怀着忐忑的心情开始了蚂蚁金服的实习。八月,又经历了两轮面试,总算拿到转正offer。到此为止,我总算可以尽情地享受最后的校园时光了。 &/p&&h2&我的读研经历&/h2&&p&阿里是我读研阶段的一个重要目标,刚上研一的时候我便立下Flag,计划了读研三年要做的事情、要学的东西。翻翻我的博客,居然还能找到当时写的读研计划(想想时间过的真的好快呀)。阿里在我心中一直是技术者的朝圣地,聚集了一群技术狂热分子,为了提升一点点的性能可以废寝忘食。在立下这个flag后,我便把我要去阿里的想法告诉了身边的所有人。我不想给自己留有后路,既然牛逼吹出去了,那就得落实到行动上。&/p&&p&我当时的计划是这样的,研一玩命做项目,毕竟写代码是一项孰能生巧的技术,多写代码自然能加深对技术的理解。事实也确实证明了这一点。我大四毕业的那个暑假,第一次接触《深入理解JVM虚拟机》,当时看完之后是一脸懵逼的,所有的汉字都认识,但连成一条句子后咋就不明白呢?然后怀着这种一脸懵逼的状态,强行把这本书看完了,但由于理解的不够深刻,很快就忘记了。然后经过一年疯狂做项目,当我再抱起这本书时,我对这本书的感觉有了180度的转变,通俗易懂啊。我怀疑自己当时为什么这么傻。而在这一年之内,我一共做了四个项目。所以说,写代码能潜移默化地提升你对技术的理解程度。&/p&&p&记得我们学校考研结果公布是在三月底,得知我录取了,短暂的高兴了一下,第二天便去了导师实验室,参与到项目中去。因为我心理很清楚,我的目标是阿里。 &br&刚去实验室的时候感觉自己完全是一只小白,师兄们开会讨论的东西我竟然一个字都听不懂,刚开始分到的工作也很难顺利的完成。但我是一个天生不服的人,我越是不懂,我越是要征服。(PS:追女生也一样,当时看上了一个高冷型女神。越是高冷,我越要拿下……省略一万字……最后成功了)。我渐渐跟上了师兄们的步伐,从第二个项目开始,我一直是项目负责人了。 &br&我给自己定的方向是Java,而实验室的项目五花八门,Qt、C++、图像图形……,但我心里清楚,这些项目可以拓宽我的视野,可以锻炼我的学习能力、思维方式,但要深入理解的技术还是Java。所以我利用项目空窗期,看了很多Java方面的书籍,文末我列了一份清单供大家参考。&/p&&p&研一做了一年项目之后,感觉自己解决问题的能力、快速上手新技术的能力有所提升,但做项目一味求快、一味赶时间,我对很多技术的理解仅停留表面。所以更多时候我感觉自己是在搬砖,很难写出高质量的代码。当时我决定,研二的上半学期一定要好好稳固基础,深入理解技术背后的原理,放慢做项目的节奏,不一味地盲目求快。&/p&&p&然而研二我去了一家创业公司实习,被安排做前端。既然我无法选择,那我就拥抱变化。既来之则安之,我希望自己所花的时间都有所收获。所以我全身心投入到工作中去。公司安排我做前端,虽然这并不是我想干的事情,但当前别无选择,既然做那就得做好。我花了一个月的时间怒刷前端知识,学习Angular、React,了解它们的设计思想,学习JS背后的原理,也看到了前端目前的发展状况。前端的技术迭代速度很快,但技术背后的原理都是类似的,所以抓住技术背后的本质才是最重要的。 &br&这段实习一直持续到了今年一月,我心理清楚,二月底三月初阿里的实习招聘就要开始,所以我挤出中午休息时间、晚上下班后的时间、周末的时间,复习我之前积累的东西。&/p&&p&三月三号,人生的第一次面试,在看到杭州的电话时,那一刻的心情既忐忑又兴奋。在此之前,我并不清楚自己的水平在所有应届生中处于一个怎样的层次,在电话接通之前我已经做好了充分的心理准备,想象了各种被面试官吊打的画面。第一次面试持续了54分钟,面试官似乎破有耐心,整个面试过程相谈甚欢。那一次的面试给了我巨大的信心,因为我清楚,我离我的目标更近了一步。 &br&在接下来的一个月中,我陆陆续续接到了五次面试电话,每一次面试都是一次学习的机会,能发现自己的不足,在与面试官交流的过程中也能了解到最新的技术、最佳的实现方法。&/p&&p&四月十四,记得那天刚给本科生上完算法课,晚饭过后便收到的阿里的offer。当时的喜悦之情溢于言表,这么久的努力没有白费。但我心里也清楚,阿里的实习转正率向来很低,要想通过实习留下来也不是一件容易的事。所以在收到阿里offer之后的那晚,我重新规划了接下来的学习计划,将我的短期目标更新成:拿下阿里转正offer。&/p&&p&5.20,一个美好的日子,我怀着憧憬、忐忑、兴奋的心情走进了支付宝大楼,开始了我三个月的实习生涯。这三个月的实习让我学到了很多,我看到了每天的进步,也看到了自己的不足。这100天经历了太多的事情,有太多的体会,有空我再单独写一篇实习期间的感悟与大家分享。&/p&&p&9.1晚上11点,我的状态从『面试中』变成了『待跟进offer』,我会心一笑,我达成了人生第一阶段的目标。那一刻我没有太多的激动,在经过了2017年8个月的持久作战之后,这个offer早已在我的意料之中。&/p&&p&第二天是周六,这个周末我给自己放了两天的假。虽然在杭州已经呆了102天,虽然支付宝大楼就在西湖边,但每天两点一线的工作,我并没有去过西湖。那一晚我的基友(帅气的天哥,文末附有征婚启示)得知我收到offer后便立即买票,坐了一夜的火车来杭州为我庆祝。也托他的福,在这个周末我第一次游览了这座美丽的城市。&/p&&p&最后的校园时光,我给自己定了一个新的目标,这个目标也许充满了挑战、充满了艰辛与困难,但我想如果能达成,我的人生将会有很大的改变。在人生的路上,我还在奋斗。希望与各位共勉。&/p&&h2&建议:养成写博客的习惯&/h2&&p&在面试阿里的过程中,博客帮了我很大的忙。并不是说有博客在面试中会加分,而是写博客的过程能加深你对知识的理解,而且回顾起来也特别高效(毕竟是自己写的东西)。&/p&&p&我从研一开始便养成了写博客的习惯,现在先过头来,这两年我一共写了185篇文章,有22W的访问量,也很荣幸称为专家博主。我的博客现在已经成为我一笔最宝贵的财富,记录了我技术的整个体系结构,也记录了学习技术的心路历程。&/p&&p&可能很多同学都有写博客的经历,但能长期坚持的少之又少。我想告诉大家,任何事情都贵在坚持。只要坚持21天就能养成习惯。有的时候对这件事缺乏兴趣了很难再持续下去,但想想自己的目标,咬咬牙坚持下去,养成习惯你就赢了。&/p&&p&我的博客一般都是看完一本书后的总结,我会把一本书中最核心的东西,按照我的理解把它们记录下来。每一本书我都会看三遍,第一遍是快速浏览,了解整本书的体系结构、作者的行文思路,知道书中重要的、不重要的内容,也就是要建立起全局观。第二遍我会精读,把那些我认为重要的内容挑选出来着重阅读、反复理解、吃透。第三遍阅读,往往会冒出新的理解,我时常有这种『书读百遍,其义自见』的感觉。三遍读完后,我便按照自己的理解,把核心内容写成博客。由于是自己的写的东西,所以在复习的时候只要花上三五分钟通读一遍,所有的知识点又被唤醒。&/p&&h2&Java体系结构整理&/h2&&ul&&li&Java相关&/li&&ul&&li&Java集合框架&/li&&li&Java并发编程
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(一)——并发编程需要注意的问题&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(二)——重排序&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(三)——volatile&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(四)——线程的状态&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(五)——中断&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(六)——线程间的通信&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(七)——Executors&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(九)——批量获取多条线程的执行结果&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(十)——线程池(1)&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(十一)——线程池(2)&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(十二)——线程安全&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(十三)——锁优化&/a&&/li&&/ul&&li&Java并发容器
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发容器大合集&/a&&/li&&/ul&&li&Java虚拟机
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(一)——JVM内存模型&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(二)——揭开HotSpot对象创建的奥秘&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(三)——垃圾收集策略详解&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(四)——对象内存的分配策略&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(五)——HotSpot垃圾收集器详解&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(六)——JVM性能调优实战&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(七)——Class文件结构&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(八)——类加载的时机&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(九)——类加载的过程&/a&&/li&&/ul&&li&设计模式
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/category/5767333& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&23种设计模式-大闲人柴毛毛的博客&/a&&/li&&/ul&&li&Spring核心思想
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入剖析Spring(一)——IoC的基本概念(从面向对象角度介绍)&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入剖析Spring(二)——IoC容器的实现&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入剖析Spring(三)——Bean的生命周期&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入剖析Spring(四)——AOP&/a&&/li&&/ul&&li&面向对象的思想&/li&&li&Java8新特性
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java8新特性——Lambda表达式(一)&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java8新特性——StreamAPI(一)&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java8新特性——StreamAPI(二)&/a&&/li&&/ul&&/ul&&/ul&&p&&br&&/p&&ul&&li&计算机基础&/li&&ul&&li&算法
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/category/6840444& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据结构与算法-大闲人柴毛毛的博客&/a&&/li&&/ul&&li&数据结构
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&彻底搞懂红黑树&/a&&/li&&/ul&&li&操作系统&/li&&li&计算机网络
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机网络传输层知识点全覆盖&/a&&/li&&/ul&&li&数据库
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库索引全面解析&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库事务详解&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库三大范式&/a&&/li&&/ul&&/ul&&/ul&&p&&br&&/p&&ul&&li&Linux
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/category/3112597& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux常用指令-大闲人柴毛毛的博客&/a&&/li&&/ul&&li&架构高性能网站
&/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(一)——了解衡量网站性能的指标&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(二)——动态内容缓存&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(三)——浏览器缓存&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(四)——反向代理缓存&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(五)——Web组件分离&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(六)——构建数据缓冲区&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(七)——负载均衡&/a&&/li&&/ul&&/ul&&hr&&h2&我的书单&/h2&&p&先唠叨两句。学好计算机,基础扎实很重要!Github上每17秒就会出现一种新的技术、新的框架,技术迭代的速度远高于我们学习的速度,但这并不可怕,因为技术背后的原理是相通的。所以我们要做的就是抓住技术本质、打牢基础,以不变应万变。附上之前我关于基础学习的回答:&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&大闲人柴毛毛:计算机科学与技术专业的学生要怎样做才能避免成为 一个低级的码农?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&大闲人柴毛毛:自学编程需要注意什么?&/a&&/p&&p&&br&&/p&&ul&&li&基础类书单&/li&&ul&&li&《Java核心技术》卷一+卷二&/li&&ul&&li&这两本书加起来将近1700页,读完它需要有足够的勇气和耐心。但这就是打基础的阶段,罗胖子说过,学习就是一个使大脑处于非舒适态的过程,学习并不是一件快乐的事情,如果你长期处于舒适状态,或许你自认为每天都在学习,但实际上你一直在原地踏步。所以我觉得这本书至少要通读一遍,就算含着泪也要把它读完。&/li&&li&当然,读1700页的书毕竟是一项浩大的工程,换谁都会心生乏味。所以我觉得读书的方式方法也很重要,可以伴随视频教程一起学习,每读完一章后再看一遍视频,这样一方面起到调节的作用,另一方面在读书过程中遇到的问题也许会在视频学习中迎刃而解,一举两得。&/li&&/ul&&li&《计算机网络》-谢希仁&/li&&ul&&li&这是一本好书!我在读这本书的时候有种强烈的感受,就是每当我有一丝疑惑的时候,我就会在接下来的篇幅中马上找到问题的答案,一环扣一环。这种感觉让我很享受阅读的过程,使得整个阅读过程都伴随着『发现问题-解决问题』的循环,吊足了我的胃口,也就很自然的把一本书一口气看完。也许这就是大师吧。&/li&&/ul&&li&《算法》-Sedgewick&/li&&ul&&li&算法是程序员的基本功,这本书用彩图解释各种算法的原理,通俗易懂、肥而不腻。&/li&&/ul&&/ul&&/ul&&p&&br&&/p&&ul&&li&进阶类书单&/li&&ul&&li&《深入理解Java虚拟机》-周志明&/li&&ul&&li&这本书我一共读了两次,第一次读完全是一头雾水、不知所云;时隔一年,在疯狂做了6个项目之后,再读这本书的时候,我嘲笑一年前的自己:为何当初那么傻。所以建议大家:写代码毕竟是一项熟能生巧的技

我要回帖

更多关于 乐视1p换电池 的文章

 

随机推荐