600c57快餐店地下现古道六合cai的账号需要验证么?

&p&第一:Python爬虫学习系列教程(来源于某博主:&a href=&///?target=http%3A///1052.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/1052.htm&/span&&span class=&invisible&&l&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&/p&&p&Python版本:2.7 &br&&/p&&p&整体目录: &/p&&p&一、爬虫入门&/p&&p&1. &a href=&///?target=http%3A///927.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫入门一之综述&i class=&icon-external&&&/i&&/a&&/p&&p&2. &a href=&///?target=http%3A///942.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫入门二之爬虫基础了解&i class=&icon-external&&&/i&&/a&&/p&&p&3. &a href=&///?target=http%3A///947.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫入门三之Urllib库的基本使用&i class=&icon-external&&&/i&&/a&&/p&&p&4. &a href=&///?target=http%3A///954.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫入门四之Urllib库的高级用法&i class=&icon-external&&&/i&&/a&&/p&&p&5. &a href=&///?target=http%3A///961.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫入门五之URLError异常处理&i class=&icon-external&&&/i&&/a&&/p&&p&6. &a href=&///?target=http%3A///968.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫入门六之Cookie的使用&i class=&icon-external&&&/i&&/a&&/p&&p&7. &a href=&///?target=http%3A///977.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫入门七之正则表达式&i class=&icon-external&&&/i&&/a&&/p&&p&二、爬虫实战&/p&&p&1. &a href=&///?target=http%3A///990.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫实战一之爬取糗事百科段子&i class=&icon-external&&&/i&&/a&&/p&&p&2. &a href=&///?target=http%3A///993.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫实战二之爬取百度贴吧帖子&i class=&icon-external&&&/i&&/a&&/p&&p&3. &a href=&///?target=http%3A///2083.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫实战三之实现山东大学无线网络掉线自动重连&i class=&icon-external&&&/i&&/a&&/p&&p&4. &a href=&///?target=http%3A///1001.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫实战四之抓取淘宝MM照片&i class=&icon-external&&&/i&&/a&&/p&&p&5. &a href=&///?target=http%3A///1076.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫实战五之模拟登录淘宝并获取所有订单&i class=&icon-external&&&/i&&/a&&/p&&p&6. &a href=&///?target=http%3A///1972.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫实战六之抓取爱问知识人问题并保存至数据库&i class=&icon-external&&&/i&&/a&&/p&&p&7. &a href=&///?target=http%3A///997.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫实战七之计算大学本学期绩点&i class=&icon-external&&&/i&&/a&&/p&&p&8. &a href=&///?target=http%3A///2852.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺&i class=&icon-external&&&/i&&/a&&/p&&p&三、爬虫利器&/p&&p&1. &a href=&///?target=http%3A///2556.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫利器一之Requests库的用法&i class=&icon-external&&&/i&&/a&&/p&&p&2. &a href=&///?target=http%3A///1319.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫利器二之Beautiful Soup的用法&i class=&icon-external&&&/i&&/a&&/p&&p&3. &a href=&///?target=http%3A///2621.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫利器三之Xpath语法与lxml库的用法&i class=&icon-external&&&/i&&/a&&/p&&p&4. &a href=&///?target=http%3A///2577.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫利器四之PhantomJS的用法&i class=&icon-external&&&/i&&/a&&/p&&p&5. &a href=&///?target=http%3A///2599.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫利器五之Selenium的用法&i class=&icon-external&&&/i&&/a&&/p&&p&6. &a href=&///?target=http%3A///2636.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫利器六之PyQuery的用法&i class=&icon-external&&&/i&&/a&&/p&&p&四、爬虫进阶&/p&&p&1. &a href=&///?target=http%3A///2433.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫进阶一之爬虫框架概述&i class=&icon-external&&&/i&&/a&&/p&&p&2. &a href=&///?target=http%3A///2443.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫进阶二之PySpider框架安装配置&i class=&icon-external&&&/i&&/a&&/p&&p&3. &a href=&///?target=http%3A///912.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫进阶三之爬虫框架Scrapy安装配置&i class=&icon-external&&&/i&&/a&&/p&&p&4. &a href=&///?target=http%3A///2652.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫进阶四之PySpider的用法&i class=&icon-external&&&/i&&/a&&/p&&figure&&img src=&/cb002ebb9d3ac_b.png& data-caption=&& data-rawwidth=&1000& data-rawheight=&80& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&/cb002ebb9d3ac_r.png&&&/figure&&p&第二(第一的姊妹篇):&a href=&///?target=http%3A//blog.csdn.net/column/details/why-bug.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫入门教程&i class=&icon-external&&&/i&&/a&(来源于博主:blog.csdn.net/column/details/why-bug.html)&/p&&p&Python版本:2.7&/p&&p&教程目录:&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/8922826& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(一):抓取网页的含义和URL基本构成&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/8923067& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/8923725& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(三):异常的处理和HTTP状态码的分类&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/8924889& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(四):Opener与Handler的介绍和实例应用&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/8925978& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(五):urllib2的使用细节与抓站技巧&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/8927832& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(六):一个简单的百度贴吧的小爬虫&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/8929576& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(七):Python中的正则表达式教程&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/8932310& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(八):糗事百科的网络爬虫(v0.3)源码及解析(简化更新)&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/8934726& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/9305229& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(11):亮剑!爬虫框架小抓抓Scrapy闪亮登场!&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/pleasecallmewhy/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程&i class=&icon-external&&&/i&&/a&&/p&&figure&&img src=&/b0a1d270b45c17dd8c3e857d76bc0c47_b.png& data-caption=&& data-rawwidth=&1000& data-rawheight=&80& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&/b0a1d270b45c17dd8c3e857d76bc0c47_r.png&&&/figure&&p&第三:你已经看完上面(第一或者第二)的教程:再推荐知乎用户&a class=&member_mention& href=&///people/feecd4efc4& data-hash=&feecd4efc4& data-hovercard=&p$b$feecd4efc4&&@陈唯源&/a& 的实战练习博客 &/p&&p&&a href=&///?target=http%3A//blog.csdn.net/cwyalpha/article/details/& class=&internal&&Python爬虫学习记录(1)——Xiami全站播放数&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/cwyalpha/article/details/& class=&internal&&Python爬虫学习记录(2)——LDA处理歌词&/a&&/p&&p&&a href=&///?target=http%3A///data/43972& class=&internal&&百度音乐带标签,作曲,演唱者,类别的歌词数据&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/cwyalpha/article/details/& class=&internal&&Python爬虫学习记录(4)——传说中的足彩倍投法。。好像也不是那么靠谱&/a&&/p&&p&&a href=&///?target=http%3A///data/44171& class=&internal&&全球所有足球比赛比分数据以及足彩各公司盘口&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/cwyalpha/article/details/& class=&internal&&Python爬虫学习记录(3)——用Python获取虾米加心歌曲,并获取MP3下载地址&/a&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/cwyalpha/article/details/& class=&internal&&Python爬虫学习记录(5)——python mongodb + 爬虫 + web.py 的acfun视频排行榜&/a& &/p&&p&&br&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/cwyalpha/article/details/& class=&internal&&Python爬虫学习记录(0)——Python 爬虫抓站 记录(虾米,百度,豆瓣,新浪微博)&/a&&/p&&p&第四:最后推荐知乎用户&a class=&member_mention& href=&///people/9ce91cd5babbf& data-hash=&9ce91cd5babbf& data-hovercard=&p$b$9ce91cd5babbf&&@gaga salamer&/a& 的实战练习博客&/p&&p&&a href=&///?target=http%3A//aljun.me/post/17& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&爬虫教程(1)基础入门&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//aljun.me/post/18& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&爬虫教程(2)性能进阶 &i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//aljun.me/post/22& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&知乎用户信息爬虫(规模化爬取)&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//aljun.me/post/4& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用scrapy爬取豆瓣电影新片榜&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//aljun.me/post/5& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用scrapy对豆瓣top250页面爬取(多页面爬取)&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//aljun.me/post/6& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用scrapy自动爬取下载图片&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//aljun.me/post/7& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用scrapy自动下载石原sama的豆瓣影人图集(727张图片,自动下载)&i class=&icon-external&&&/i&&/a& &/p&&p&希望以上的教程可以帮助到大家。&/p&&p&&br&&/p&&p&&b&很多人问我如何学习Python爬虫,为此我整理编写了一本Python爬虫相关的电子书,主要包括Python入门、Python爬虫入门到进阶、Python爬虫面试总结等等。可以在微信公众号【一个程序员的日常】后台回复关键词【1】获取这本电子书。&/b&&/p&
第一:Python爬虫学习系列教程(来源于某博主:)Python版本:2.7 整体目录: 一、爬虫入门1. 2. 3. 4.
&p&这个回答可能对80%体质极差之人都有用,而且是完全可操作的, 体质差的人去医院通常检查不出问题,这时大家都会选择中医来调理,这让我们从事中医的人积累了非常丰富的经验和各类样本,几乎每天都有人因这个问题来调理,几十年从未间断,而且这几年来的年轻人和小孩子却越来越多,年轻化现象很明显。&/p&&p&在这里请不要争辩中西医的好坏,体质差的人需要的是方法而不是谁对谁错,不喜欢直接忽略就是了,没必要义愤填膺,至少这是一个中医家庭在一线实践的宝贵经验。&/p&&p&体质差的人都是各种各样的问题,原因也各不相同,中医诊断一定是望闻问切四个方法。对于一般人来说这显得有些高深甚至不可捉摸,诊断不准导致下一步的调理方法就不可能取得良好效果,所以很多人在调理的圈子里打转转,身体始终没有起色。&/p&&br&&p&对于普通人,我提供一个&b&简单易学且准确率极高的方法,并附上具体调理的建议&/b&,大家可以迅速学会。就是中医望诊中的舌诊,通过观察自己舌头的变化来很快的自我诊断和保养,简单易懂。&/p&&p&&b&如果你对比一下周围人,每个人的舌头形态都明显的不一样,包括舌头的宽窄胖瘦、薄厚、舌体的颜色、舌苔的薄厚和颜色黄白、舌下静脉血管的粗细颜色等。&/b&&/p&&p&这些差异是非常非常宝贵的诊断依据,熟练运用的话经常在把脉之前就可以帮患者诊断清楚,后面的把脉就成了一项辅助和确认的手段了。&/p&&p&&b&身体差的人基本可以分成脾虚气血不足、脾虚湿气重、阴虚、内有淤血、上寒下热。&/b&(上寒下热情况复杂必须吃药调理,不再此叙述)&br&下面请自行对照自己的身体问题及解决方案。&/p&&p&舌苔图片很多,&i&为了避免引发不适,我使用了清晰度低的且病情不太严重的图片,情况严重太恶心的已避免使用,请放心阅览。&/i&&/p&&br&&p&&b&一、 脾虚气血不足(齿痕、舌体颜色浅)&/b&&/p&&p&判断脾虚很简单:&b&脾虚的人舌头边缘是波浪形或锯齿形&/b&,正常人是整齐的弧线边缘。 &/p&&p&判断气血虚:&b&气血不足的人舌体的颜色比较浅&/b&,只要出现一点泛白即可确定气血虚。(舌体就是舌头的肉,看肉的颜色深浅就行)正常人的舌体颜色是鲜红的。&/p&&figure&&img data-rawheight=&1280& src=&/v2-5c5d6b41443dfb80dcd672cb9549dd79_b.jpg& data-rawwidth=&1707& class=&origin_image zh-lightbox-thumb& width=&1707& data-original=&/v2-5c5d6b41443dfb80dcd672cb9549dd79_r.jpg&&&/figure&&br&&p&单凭齿痕这一个条件即可确定脾虚。&/p&&figure&&img data-rawheight=&1280& src=&/v2-7d6cffa8fea5f23a3bffe1_b.jpg& data-rawwidth=&1707& class=&origin_image zh-lightbox-thumb& width=&1707& data-original=&/v2-7d6cffa8fea5f23a3bffe1_r.jpg&&&/figure&&br&&p&看上面这个舌体的颜色明显淡了很多,就是明显的气血不足。判断完了,简单吗?!&/p&&p&从目前的接诊情况来看,90%以上的年轻人都有脾虚出现,只是轻重的问题,这与生活方式密不可分,&b&熬夜、吃喝冷饮油腻是导致脾虚的两个最大因素。&/b&&/p&&p&&b&另可参考的身体症状:&/b&消化系统不好、有气无力、比别人冬天更怕冷夏天更怕热、天凉时手脚冰冷、出现脱发、白发现象、容易疲劳但白天困晚上兴奋、记忆力下降、一考虑问题就烦、多梦、皮肤萎黄或白无血色、皮肤松弛皱纹多,突然站立时头眼晕、讲话气力不足、易感冒没活力、部分女性嘴唇颜色泛白或月经量减少。如有以上任意两点即可确定为脾虚气血不足,其实人们常说的阳虚也包含在了其中。&/p&&p&&b&女性因月经和生育的原因,绝大多数存在血虚的情况,往往在30岁之后身体素质、气色相比男性更是明显下降。&/b&&/p&&p&&b&调理方法&/b&:先健脾再补气血&/p&&p&第一步&b&健脾&/b&:山药粥。必须用正宗怀山药! 有些医书甚至将它称为“怀参”,我们医用的感觉的确如此,而且它不像人参那么容易上火。&/p&&p&&b&请不要轻蔑的一笑而过!你也许已经吃过很多补药了,但我想给你讲讲怀山药是怎么种的。&/b&&br&上过中学的人一定知道一个概念叫“土地休耕”,就是收获一季庄稼后第二年不再耕种,让地力恢复好一点。 种植怀山药的土地在收获后必须进行3年的休息,才能重新再进行种植,否则根本无法生长。你能想象这一根小小的山药吸取了多少土地的精华吗?所以说那句有名的 “山药种多了地受不了”不是一句调侃的话!可惜现在很多种植户用化学肥料保证产量,导致山药质量下降厉害,简直令人惋惜。&/p&&p&正宗的怀山药一定是河南黄河滩出产的垆土山药,不能是随便哪里产的都行,菜市场的更不行。中医很注重道地药材,因为它的土壤水文气候都是独一无二的。有人理解不了,这就好比高丽参就要东北的才上佳,你在广东种植虽然长的一摸一样,但是效果能一样吗?&/p&&p&请千万不要忽略这普通的山药,这些年每当有人大手术后身体极差的时候来找我们调理,我们从来不开药,因为病人已经非常虚弱,补药根本进不去,一定会让他们回去喝一个月怀山药和牛肉一起熬滥的粥,等身体很快恢复了才能用药调理。也许平时你并不觉得山药力量有多强,但是这种极虚患者的反应可以明显的看出山药有多厉害。&/p&&p&再补一句,请用药店的怀山药,鲜山药性质会有粘滞。某宝上的不要买,都在冒充垆土山药干,我已经科普了很多次有人就是不听,要用一定请去药店。&/p&&p&第二步&b&补气血&/b&:桂圆西洋参蒸着吃&/p&&p&具体效果我之前在另一个问题中回答了,举了我们自己家人保养的例子,相信对你是很有用的。这是所有人补养气血的绝佳品,我们实践了十几年,补气血简直有奇效,推荐给大家。目前对于气血虚的人,除非他们要求开药,否则都是让他们在家自己蒸这个吃,时间一长效果都很好。&a href=&/question//answer/& class=&internal&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/question/2869&/span&&span class=&invisible&&8056/answer/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&如果你记忆够好,前些年有个补血的药叫红桃K,有个中学生脾虚贫血喝这个根本不能停,产生了依懒性,后来我们没有开药而让她妈妈蒸桂圆洋参膏天天给他吃,不到2个月他就彻底停了红桃K,现在多数人花大钱补铁补钙补锌,就是不知道用天然食物保养。&/p&&p&无论你选择吃什么补气血,都必须慢补缓补,我没有看到过一个大补猛补成功的,补的生火生痰便秘睡不着觉倒比比皆是,请切记!&/p&&p&
注意,很多人吃阿胶补血,阿胶的确好,但如果你脾虚的话我劝你不要吃了,这个东西太滋腻,会吃的你没胃口脾虚越来越严重,脸反而更黄了,还出现各种热症。进补一定要先健脾,否则虚不受补!&/p&&br&&p&&b&二、 脾虚湿气重(齿痕、舌苔厚或水汪汪)&/b&&/p&&p&如果你老是说自己湿气重,那么你的舌头是不是长这样?请注意舌苔&/p&&figure&&img data-rawheight=&912& src=&/v2-ffc25d599fad479ff2d6445_b.jpg& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-ffc25d599fad479ff2d6445_r.jpg&&&/figure&&br&这样&br&&figure&&img data-rawheight=&1280& src=&/v2-dcecd422c016_b.jpg& data-rawwidth=&960& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/v2-dcecd422c016_r.jpg&&&/figure&&br&这样&br&&figure&&img data-rawheight=&1280& src=&/v2-2ec185594_b.jpg& data-rawwidth=&950& class=&origin_image zh-lightbox-thumb& width=&950& data-original=&/v2-2ec185594_r.jpg&&&/figure&&br&或这样&br&&figure&&img data-rawheight=&844& src=&/v2-4bcfe9a0b23d5ee5052c9_b.jpg& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-4bcfe9a0b23d5ee5052c9_r.jpg&&&/figure&&br&是不是舌苔遍布或水液很多?越严重舌苔会越厚&p&脾虚有齿痕的判断方法上面已经说了,这里只说湿气的情况,&/p&&p&判断湿气的标准:只要&b&出现厚的舌苔或舌头水汪汪就是湿气重&/b&。舌苔颜色黄就是&b&湿热&/b&,舌苔白就是&b&寒湿&/b&。(注意是舌苔颜色,不是肉的颜色)正常的舌苔是很薄的一层淡白色,如薄纱一样清净。&/p&&p&&b&另可参考的身体症状:&/b&消化系统不好、皮肤极易长痘、大便粘滞或糖稀、口臭、睡觉口水多、感觉身重睡不够、背酸、腿困、晨起脸部浮肿、身体局部尤其小腿有浮肿、出汗粘或油不清爽。如有以上任意两点即可确定为脾虚湿气重。&/p&&p&调理方法:&b&思路是健脾和祛湿两个方面。&/b&&/p&&p&&b&1、脾虚寒湿型&/b&:注意小便一定为清水颜色。&/p&&p&祛湿:藿香、佩兰、茯苓、陈皮、生姜,放在一起每天煮水喝,这个一点不会苦,而且味道很芳香,可以再加一点冰糖更好喝,坚持下去效果惊人,尤其是治口臭严重的那种效果很到位。&/p&&p&健脾:当然还是山药粥。 我实在没发现比怀山药更实用的东西了,只要你愿意,山药红枣粥、山药莲子粥,山药紫薯粥,各种搭配~~~,另外平时做菜可以多用花椒桂皮茴香等调料,促进寒气的发散。&/p&&br&&p&&b&2、脾虚湿热型&/b&:小便一定为深黄颜色。&/p&&p&
赤小豆、薏仁、怀山药、冰糖。这几种熬粥,秘诀在于用量要大,而且不能加大米,尤其是糯米,有些人在超市买的粉,每天一两勺,我劝你还是别吃了,这么一点量没用,而且他们的山药也是南方产的品种! 如果你说你曾经吃过没有用,那请你按我这个方法量大点吃一年再来说!&/p&&br&&br&&p&关于喝水,不管你是寒还是热,只要有湿就请你没事别老喝水,等渴了再喝,不出汗每天就不要超过800毫升。身体水湿泛滥,你还不停的喝啥喝,一边喊自己有水湿,一边灌着水。我不知道电视上给你洗脑的时候你自己有没有考虑过他们的逻辑,一天八杯水喝的你尿频身困掉头发肾气虚你还不知道刹车,你见过哪个人喝水把差皮肤喝到雪白透亮了?我倒是天天见到体内水湿泛滥的,怎么不知道思考呢!&/p&&p&如果你们的老爹没事端个茶杯喝喝喝,回去先看看他那惨不忍睹的舌头,然后教他怎么做人。&/p&&br&&p&&b&三、阴虚火旺(光秃秃的红舌头)&/b&&/p&&p&判断阴虚火旺的标准:&b&舌体通红,极少舌苔。&/b&&/p&&figure&&img data-rawheight=&720& src=&/v2-b7ab0cb715deb150da84d5_b.jpg& data-rawwidth=&960& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/v2-b7ab0cb715deb150da84d5_r.jpg&&&/figure&&br&&p&&b&另可参考的身体症状:&/b&耳鸣眼干、手脚心发热、大便长期干燥、口渴明显、盗汗、严重失眠多梦、动辄咽部发炎上火、脾气大没耐心、嘴唇发红脉搏快。如有以上任意两点即可确定为阴虚。&/p&&p&&b&调理方法:&/b&&/p&&p&不严重的,沙参、麦冬、枸杞、砂仁泡水喝,每日饮水量小一点;也可以放一起炖猪骨汤喝。这些味道都不苦!&/p&&p&严重的,用补肾的花魁药:六味地黄丸。每天早起后服一次即可,但必须用砂仁淡盐水冲服,否则效果不好,&b&便秘不可服用&/b&。&/p&&br&&b&四、淤血体质(舌面淤点、舌下黑血管)&/b&女性和家有中老年人一定要看这条&br&&p&淤血体质的判断标准:&b&舌头出现小淤点或舌下静脉怒张。&/b&&/p&&br&&figure&&img data-rawheight=&1416& src=&/v2-8fcb24beb2501e_b.jpg& data-rawwidth=&1684& class=&origin_image zh-lightbox-thumb& width=&1684& data-original=&/v2-8fcb24beb2501e_r.jpg&&&/figure&&br&还有舌苔卷起来下面又黑又粗或者蔓延的血管,图片看了会不舒服我就不放了。&br&&br&&p&&b&另可参考的身体症状:&/b&女性长胡子或身体汗毛多、皮肤有红血丝、女性生育后脸部长斑、嘴唇出现紫色或青色、长期莫名的嘴唇干燥、皮肤异常干燥尤其是小腿起干皮、例假疼痛、按照风湿病久治不愈的各类肌肉关节疼痛、静止状态时手有轻微的抖动。任意一点出现即可确定为内有淤血(孕妇除外、不可活血化瘀)。&/p&&p&1.做过手术、剖腹产、人流、有妇科病的人、中老年人一定会出现淤血,只要开刀不管你是1个月前还是3年前做的,淤血始终藏在你的身体组织里,所以一定要清理,不信请对照自己的舌头。&/p&&p&2.淤血严重的人舌头下面的血管跟树根一样野蛮生长、两股血管又粗又黑、紫,这类女性一定要关注自己的妇科系统,经验已经让我们不需再验证了,可以直接告诉你结果:如果你长期忽略,早晚会有子宫肌瘤或卵巢肿瘤等着你,时间会证明一切!&/p&&p&3.如果你年迈的父母有淤血症状,请你做一个孝顺的孩子,也许在他们得病后你无能为力,但是你可以预防或减缓他们得病,中风和心脏病等急性病的原因很多,但发病前很长一段时间一定会有严重的淤血在体内生成。&/p&&p&所以如同年轻人日常化妆一样,日常活血化瘀也要成为你父母的生活习惯,坚持下去他们的中老年病会比一般人明显减少,这才是你真正要回报父母的,不要跑到这里只顾着你自己健康美丽,人不能太自私。&/p&&br&&p&&b&调理方法:&/b&如果&b&没有妇科疾病&/b&的女性可以用桃红四物汤炖汤喝,量不要大,每个月3次就行,经期一定不要喝。&/p&&p&对于其他人,有很多方案,最简单易行的一个方法就是现在流行的三七粉,每天吃6克左右,效果非常稳定。但是你&b&一定不要去网上买药,便宜没好货,保证你被坑&/b&,某宝其他东西低价划算,但是你买中药材绝对不能按这个标准来,已经有无数的患者苦着脸向我说某宝的药材没用,后悔买了。中药材的水深的你无法想象,事关健康,不要贪那点便宜,如果你买药都贪便宜,那你真的就无药可救了,&b&切记去药店买!________________________________________________________________________________&/b&&/p&&p&我以上所说的都是给患者指导过的食疗方法,不是纸上谈兵,实践证明是有效和适用的,但是有些人就是喜欢浅尝辄止,试几天没大效果就换其他的(我甚至遇到过一个女士10天换着吃了5个大夫的药,这种人每天吃三顿人参也没用),到头没有一个好办法,身体还是一样的差。如果你决定采用,请你先坚持半年,否则不要试,现在就告诉你短期作用微小,别费神费钱。想想你身体差是一天两天造成的吗,哪一个不是成年累月积累的。&/p&&p&最后我想讲一个做燕窝的朋友经常扯的段子,他说这个段子的目的主要是推销自己的燕窝,不过我觉得用在这里形容保养身体的人比较恰当。一个人一次性买了1斤燕窝吃了半年,回头感叹多亏买的多坚持了半年,要是当初买1两试试可能就没有现在的效果;另一个人也庆幸的说多亏只买了1两,试了果然没效果,要是当初一下买1斤那真就亏大了。保养岂不也是这个道理!?&/p&&p&&b&调理身体应该是你的生活习惯而非任务,只追求短期效果请你忽略这篇文章!&/b&&/p&&br&&p&以上症状若情况&b&严重或有已知的疾病&/b&请及时向医生咨询或去医院治疗,本篇只针对&b&无基础疾病&/b&的体虚建议。&/p&&p&希望能带给身体差又调理无方的朋友们一点有益的信息,很多人存在以上几种情况的&b&叠加&/b&,如有脾虚气血不足同时还有痰湿和淤血,可以按健脾去湿化淤补气血的先后顺序自行调理保养,谢谢!&/p&&p&&b&再提醒一次,用补药前请确定自己身体没有脾虚和水湿,买药材去实体药店千万别上某宝!&/b&&/p&&p&要不点个赞再走?&/p&&br&&p&文中那个链接在此&a href=&/question//answer/& class=&internal&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/question/2869&/span&&span class=&invisible&&8056/answer/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&很多人发私信,我实在回不过来,还是别发了,谢谢!&/p&
这个回答可能对80%体质极差之人都有用,而且是完全可操作的, 体质差的人去医院通常检查不出问题,这时大家都会选择中医来调理,这让我们从事中医的人积累了非常丰富的经验和各类样本,几乎每天都有人因这个问题来调理,几十年从未间断,而且这几年来的年轻…
&figure&&img src=&/50/v2-a99321e8bbdb70a560f4b4fb334f7748_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/50/v2-a99321e8bbdb70a560f4b4fb334f7748_r.jpg&&&/figure&&p&MiHomePlus 是我為 iOS 家庭編寫的 Android App,主要的作用就是作為 iOS 家庭的操作代理。&/p&&p&&b&透過下面鏈接查看,能獲得更佳的排版樣式&/b&&/p&&a href=&/?target=https%3A///qoli/MiHomePlus/blob/master/INTRODUCTION.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&qoli/MiHomePlus&i class=&icon-external&&&/i&&/a&&a href=&/?target=https%3A///98.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&為你的 iOS 家庭搭建最強的 Homebridge 支援﹣MiHomePlus 介紹&i class=&icon-external&&&/i&&/a&&br&&br&&p&MiHomePlus 的&b&工作原理&/b&是這樣的:&br&1. MiHomePlus 調用 Android 「無障礙」特性,監視和控制米家 App。&br&2. 當無障礙功能觸發「TYPE_WINDOW_CONTENT_CHANGED」事件時候,與另一項目 MiPlusServer 通信,把監視的設備狀態同步給 MiPlusServer。&br&3. MIPlusServer 從 Homebridge 收取到操作通知時候,基於 &a href=&/?target=http%3A//Socket.io& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Socket.io&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 通知 MiHomePlus 操作米家 App 去切換設備狀態。&br&4. 在 Homebridge 基於 Switcheroo 插件提供的操作接口。&br&5. MiPlusServer 是 Web 接口。&/p&&h2&關聯項目&/h2&&a href=&/?target=https%3A///qoli/MiHomePlus& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&qoli/MiHomePlus&i class=&icon-external&&&/i&&/a&&br&&a href=&/?target=https%3A///qoli/MiPlusServer& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&qoli/MiPlusServer&i class=&icon-external&&&/i&&/a&&br&&br&&h2&準備設備&/h2&&ol&&li&Pi 一枚。&/li&&li&閒置 Android 手機一個。&/li&&/ol&&p&Pi 我用了 NanoPi,59 元那個 256MB 的版本就足夠了。然而 Android 手機最低要求是 4.2.1 版本的,基於 API 19,因為我是基於這個版本做的開發。&/p&&h2&初始化 NanoPi 環境&/h2&&p&我們需要在 NanoPi 搭建 Homebridge 和安裝 MIPlusServer。&/p&&h3&安裝 Homebridge&/h3&&p&參考這幾遍文章完成 Homebridge 的安裝。&br&1. &a href=&/?target=http%3A///wiki/index.php/NanoPi_NEO/zh%23.E5.87.86.E5.A4.87.E5.B7.A5.E4.BD.9C& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NanoPi NEO/zh - FriendlyARM WiKi&i class=&icon-external&&&/i&&/a&&br&2. &a href=&/?target=http%3A///_play_with_nanopi/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&折腾 友善之臂 Nano PI NEO&i class=&icon-external&&&/i&&/a&&br&3. &a href=&/?target=http%3A///nozuonofun/realize-homekit-with-raspberry-pi-and-xiaomi-smart-devices/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用树莓派和小米智能设备来实现homekit - DJ Zhang&i class=&icon-external&&&/i&&/a&&/p&&p&建議安裝的 Homebridge 插件:&br&1. homebridge-yeelight 控制燈&br&2. homebridge-mi-aqara 改良版的 aqara 網關&br&3. homebridge-switcheroo MIPlusServer 基於這個插件和 Homebridge 通信的。&/p&&p&homebridge-miio 這個插件聽說可以控制第一代 WIFI 插座,我沒裝,所以我不知道。&/p&&p&當你完成 Homebridge 的安裝后,我們就要開始進行 &b&MIPlusServer&/b& 的安裝。&/p&&h3&安裝 MIPlusServer&/h3&&h4&第一步,先 SSH Login 到你的 NanoPi,然後執行如下的命令&/h4&&div class=&highlight&&&pre&&code class=&language-bat&&&span&&/span&git clone /qoli/MiPlusServer.git
&span class=&k&&cd&/span& ./MiPlusServer
chmod +x miServer.sh
chmod +x run.sh
&/code&&/pre&&/div&&h4&第二步,編寫你的 config.js 配置檔案&/h4&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&touch config.js
nano config.js
&/code&&/pre&&/div&配置檔&div class=&highlight&&&pre&&code class=&language-json&&&span&&/span&&span class=&err&&module.exports&/span& &span class=&err&&=&/span& &span class=&p&&{&/span&
&span class=&err&&tgbot:&/span& &span class=&err&&false,&/span&
&span class=&err&&token:&/span& &span class=&nt&&&&&/span&&span class=&p&&,&/span&
&span class=&err&&adminChatID:&/span& &span class=&nt&&&&&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&h4&第三步,啟動 Telegram BOT(可選步驟)&/h4&&p&如果你有啟用 Telegram Bot 作為監視 MIPlusServer 的運行必要,可以參考&br&&a href=&/?target=https%3A//neighborhood999.github.io//Develop-telegram-bot/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Telegram Bot 開發起手式&i class=&icon-external&&&/i&&/a&&br&這個教程,來獲取 Telegram BOT 的 token。&/p&暫時運行服務器&div class=&highlight&&&pre&&code class=&language-json&&&span&&/span&&span class=&err&&module.exports&/span& &span class=&err&&=&/span& &span class=&p&&{&/span&
&span class=&err&&tgbot:&/span& &span class=&err&&false,&/span&
&span class=&err&&token:&/span& &span class=&nt&&&Your Token Here.&&/span&&span class=&p&&,&/span&
&span class=&err&&adminChatID:&/span& &span class=&nt&&&&&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&接著,先按照配置檔保存一下,使用 ./miServer.sh 先讓服務器運行起來。&/p&獲取 adminChatID&p&按照下圖的辦法,加上你自己的機器人,就輸入 id 命令。機器人就會向你返回你的 Chat id 了。&/p&&figure&&img src=&/v2-6eabda0ef8e2bedac197526bbd921413_b.png& data-rawwidth=&1256& data-rawheight=&718& class=&origin_image zh-lightbox-thumb& width=&1256& data-original=&/v2-6eabda0ef8e2bedac197526bbd921413_r.png&&&/figure&&br&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&module.exports = {
tgbot: false,
token: &Your Token Here.&,
adminChatID: &Your chat id&
&/code&&/pre&&/div&&p&保存配置檔案即可。&/p&&h4&第四步,運行服務器&/h4&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&screen -S miServer
./miServer.sh
&/code&&/pre&&/div&&figure&&img src=&/v2-99a6d18b7ff08bf1a636_b.png& data-rawwidth=&1364& data-rawheight=&688& class=&origin_image zh-lightbox-thumb& width=&1364& data-original=&/v2-99a6d18b7ff08bf1a636_r.png&&&/figure&&br&&p&你看到這樣的信息就正確了。&/p&&p&隨後,你應該看到這個屏幕。那麼就可以按下「CTRL + A;CTRL + D」來退出 screen 屏幕。我教你記住的口訣,控制你的 AD 鈣奶。&/p&&p&現在,你的 NanoPi 服務器就初始化完成了。&/p&&h2&安裝 MiHomePlus App 到 Android&/h2&&h3&安裝 App&/h3&&p&打開 &a href=&/?target=https%3A///qoli/MiHomePlus/releases& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&qoli/MiHomePlus&i class=&icon-external&&&/i&&/a& 下載 MiHomePlus 當前的發佈版本。&/p&&p&不過當前 App 我正在被標記為 0.1 版本,可能會有一些問題。也有可能在運行中就退出了。但是,我測試過,可以成功運行 1 天了。第二天我就沒遇到問題,只是我把他拿回來繼續開發了。&/p&&h3&啟動 App&/h3&&figure&&img src=&/v2-db7a2b3ea_b.png& data-rawwidth=&1024& data-rawheight=&739& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/v2-db7a2b3ea_r.png&&&/figure&&br&&p&在啟動 App 后,首先,我們進行設定。&/p&&h3&App 設定&/h3&&h4&第一步,米家 App 的調整&/h4&&p&啟動米家的 App,把需要監視的設備都放在同一個房間中。Homebridge 插件能控制的就不要放進來了。&/p&&b&注意&/b&&p&在當前版本下,在一個屏幕之外的設備無法監控。&/p&&p&按照圖片的步驟,把監控的設備都整理到 &b&AndroidAPI&/b& 的房間中,當然,你可以叫其他的名字,例如「&b&MiPlusDevices&/b&」。&br&然後,你的米家就應該像圖二一樣的狀態。&/p&&figure&&img src=&/v2-eba4dc62ff13_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-eba4dc62ff13_r.jpg&&&/figure&&figure&&img src=&/v2-03c27ec1a4f27d5529bd1_b.png& data-rawwidth=&1024& data-rawheight=&739& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/v2-03c27ec1a4f27d5529bd1_r.png&&&/figure&&br&&h4&第二步,打開 Web 設定頁面&/h4&&p&打來瀏覽器,我的 NanoPi 是 &a href=&/?target=http%3A//192.168.1.104%3A3002/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://192.168.1.104:3002&i class=&icon-external&&&/i&&/a& 。&br&所以,打開 &a href=&/?target=http%3A//192.168.1.104%3A3002/setting& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&192.168.1.104:3002/sett&/span&&span class=&invisible&&ing&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&。&/p&&p&填寫房間名稱和設備列表,設備列表要使用「&b&;&/b&」半角分號分開哦。在我這裡,主要就監視了這 4 個設備。&/p&&b&注意&/b&&p&監控設備的名字必須和米家 App 顯示的名字一樣哦。&/p&&ol&&li&空調伴侶 ﹣ 坑爹的空調伴侶不能被 Homebridge 控制!!!&/li&&li&電腦燈﹣這個是使用了第一代的智能插座。&/li&&li&落地燈﹣我也忘記這是什麼插座了,不連接網關的。&/li&&li&空氣淨化器﹣還是第一代智能插座……&/li&&/ol&&p&OK,就這些了哦。&/p&&figure&&img src=&/v2-b2be61431fac2ddb34821fe9_b.png& data-rawwidth=&2322& data-rawheight=&1744& class=&origin_image zh-lightbox-thumb& width=&2322& data-original=&/v2-b2be61431fac2ddb34821fe9_r.png&&&/figure&&br&&h4&第三部,設定 Homebridge 配置檔&/h4&示例代碼:&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&{
&accessory&: &Switcheroo&,
&type&: &switch&,
&name&: &空調伴侶&,
&host&: &http://192.168.1.104:3002/device/%E7%A9%BA%E8%AA%BF%E4%BC%B4%E4%BE%B6&,
&on&: &/ON&,
&off&: &/OFF&,
&on_body&: &ON&,
&off_body&: &OFF&
&/code&&/pre&&/div&&ol&&li&name﹣這個你真可以隨便叫,只會影響在 iOS 家庭 App 的顯示名字;&/li&&li&host﹣請務必輸入「 &a href=&/?target=http%3A//192.168.1.104%3A3002/device/%25E8%25A8%25AD%25E5%E5%E5%25AD%2597& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://192.168.1.104:3002/device/設備名字&i class=&icon-external&&&/i&&/a& 」&b&設備名字&/b&一定要經過 URLEncode。&/li&&li&有多少個設備就把上面的示例代碼添加多少次。&/li&&/ol&&p&給大家一個 URLEncode 的網址:&a href=&/?target=https%3A//www.urlencoder.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&URL Decode and Encode - Online&i class=&icon-external&&&/i&&/a&&/p&&figure&&img src=&/v2-13c9bdc85db9fa3cb15daaca61a05641_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-13c9bdc85db9fa3cb15daaca61a05641_r.jpg&&&/figure&&br&&br&&h4&第四步,設定 MiHomePlus!&/h4&&ol&&li&選擇「App 設定」&/li&&li&設定伺服器地址。&/li&&/ol&&p&我的 NanoPi 就是 192.168.1.104 嘛。所以輸入了 &a href=&/?target=http%3A//192.168.1.104%3A3002/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://192.168.1.104:3002&i class=&icon-external&&&/i&&/a& 。&br&保存后使用「讀取配置檔案」,就會看到按鈕下方的文字更新過來了。數據就會保存在 App 裡面了。&/p&&figure&&img src=&/v2-7b7fe40d0d_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-7b7fe40d0d_r.jpg&&&/figure&&br&&h4&第五步,關閉小米的神隱模式(小米的才需要)&/h4&&p&這個神隱模式嘛,一開始我是不知道的。在開發過程中,每 5 分鐘就遇到 &a href=&/?target=http%3A//Socket.io& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Socket.io&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 無故斷線,只有重啟才能恢復。後來轉用錘子開發,發現沒有遇到這個問題。我就上網 Google 了一下,才發現小米的神隱模式這個功能導致的。&/p&&figure&&img src=&/v2-9e403bc3e6ac_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-9e403bc3e6ac_r.jpg&&&/figure&&br&&h4&第六步,啟動 App&/h4&&p&做了這麼多事情,終於開始了!&br&把你的 Android 拿去充電吧。反正我的紅米第一代,不充電可以運行一天。&/p&&figure&&img src=&/v2-add0a6264ccbddcea5099_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-add0a6264ccbddcea5099_r.jpg&&&/figure&&br&&h2&享受完整 HomeKit 帶來的快感吧。&/h2&&figure&&img src=&/v2-92adfa5b3ad903_b.jpg& data-rawwidth=&2250& data-rawheight=&1334& class=&origin_image zh-lightbox-thumb& width=&2250& data-original=&/v2-92adfa5b3ad903_r.jpg&&&/figure&&figure&&img src=&/v2-64da3d851f3fcf4cebad_b.jpg& data-rawwidth=&1500& data-rawheight=&1334& class=&origin_image zh-lightbox-thumb& width=&1500& data-original=&/v2-64da3d851f3fcf4cebad_r.jpg&&&/figure&&figure&&img src=&/v2-a99321e8bbdb70a560f4b4fb334f7748_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-a99321e8bbdb70a560f4b4fb334f7748_r.jpg&&&/figure&&br&&h2&Telegram BOT?&/h2&&p&你啟動了這個選項的話。&br&就可以收到一些 MiHomePlus 的狀態。&br&&/p&&figure&&img src=&/v2-cc3d23cfa5dfb64c9c7e_b.jpg& data-rawwidth=&1234& data-rawheight=&1166& class=&origin_image zh-lightbox-thumb& width=&1234& data-original=&/v2-cc3d23cfa5dfb64c9c7e_r.jpg&&&/figure&
MiHomePlus 是我為 iOS 家庭編寫的 Android App,主要的作用就是作為 iOS 家庭的操作代理。透過下面鏈接查看,能獲得更佳的排版樣式 MiHomePlus 的工作原理是這樣的: 1. MiHome…
&p&我来推荐两个工具,如下&/p&&br&&br&&p&&b&油猴脚本&/b&&/p&&figure&&img src=&/v2-c5ebab5dee82b0c_b.png& data-rawwidth=&1957& data-rawheight=&1233& class=&origin_image zh-lightbox-thumb& width=&1957& data-original=&/v2-c5ebab5dee82b0c_r.png&&&/figure&&p&我来推荐一个叫:油猴脚本&/p&&p&它是一个浏览器插件,不仅仅只支持Chrome,什么Firefox,垃圾Safari,Opera 都支持的。&/p&&p&使用方法,大家要去谷歌搜索啦,就在这里不多说了。&/p&&br&&p&&b&Stylish&/b&&/p&&figure&&img src=&/v2-ec2daec40d096be33cd84_b.png& data-rawwidth=&1318& data-rawheight=&833& class=&origin_image zh-lightbox-thumb& width=&1318& data-original=&/v2-ec2daec40d096be33cd84_r.png&&&/figure&&p&还有一个工具&b&Stylish&/b&,也是一个Chrome 插件,可以更换浏览器的字体和样式,很方便,比如设置夜间模式,使用思源黑体看知乎都忍不住多看几眼啦,大家去官网搜索很多主题吧。&/p&&br&&p&好吧,这篇文章,是我修改三次才被从小黑屋里放出来了。所以一些内容删除了,所以现在留下来的东西和刚开始的几乎不一样了。&/p&&p&所以想看完整的内容看下图吧。在我的公众号:高效率工具搜罗,回复:脚本 获取吧。&/p&&figure&&img src=&/v2-6df1a33b120aa2b89cc0b235ebf21f28_b.png& data-rawwidth=&720& data-rawheight=&1280& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&/v2-6df1a33b120aa2b89cc0b235ebf21f28_r.png&&&/figure&&br&&br&&p&最后还是恳请大家能够点个赞,点个赞,点个赞,重要的事情说三遍(~ o ~)~zZ&/p&&p&就酱紫&/p&
我来推荐两个工具,如下 油猴脚本我来推荐一个叫:油猴脚本它是一个浏览器插件,不仅仅只支持Chrome,什么Firefox,垃圾Safari,Opera 都支持的。使用方法,大家要去谷歌搜索啦,就在这里不多说了。 Stylish还有一个工具Stylish,也是一个Chrome 插件,可以…
&figure&&img src=&/50/v2-b747a4a986fe3e078a06ccb_b.jpg& data-rawwidth=&940& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&940& data-original=&/50/v2-b747a4a986fe3e078a06ccb_r.jpg&&&/figure&&h2&导语&/h2&&p& 2016年,继虚拟现实(VR)之后,人工智能(AI)的概念全面进入大众的视野。谷歌,微软,IBM等科技巨头纷纷重点布局,AI 貌似将成为互联网的下一个风口。&/p&&p& 很多开发同学,对人工智能非常感兴趣,确不知从何入手进行学习,精神哥也同样被这个问题困扰。直至看见汉彬同学的这篇文章,豁然开朗,让我坚定地迈出了成为“AI 工程师”的第一步!&/p&&blockquote&&p&本文作者:腾讯QQ会员技术团队-徐汉彬&br& 微信公众号:小时光茶社&/p&&/blockquote&&h2&一、人工智能和新科技革命&/h2&&p& 2017年,围棋界发生了一件比较重要的事,Master(AlphaGo)以60连胜横扫天下,击败各路世界冠军,人工智能以气势如虹的姿态出现在我们人类的面前。围棋曾经一度被称为“人类智慧的堡垒”,如今,这座堡垒也随之成为过去。&/p&&p& 从2016年三月份AlphaGo击败李世石开始,AI全面进入我们大众的视野,对于它的讨论变得更为火热起来,整个业界普遍认为,它很可能带来下一次科技革命,并且,在未来可预见的十多年里,深刻的改变我们的生活。&/p&&figure&&img src=&/v2-652dde9f5dec4_b.jpg& data-rawwidth=&297& data-rawheight=&365& class=&content_image& width=&297&&&/figure&&br&&p& 其实,AI除了可以做我们熟知的人脸识别、语音识别之外,还可以做其他蛮多有趣的事情。&/p&&p& 例如,让AI学习大量古诗之后写古诗,并且可以写出质量非常不错的古诗,如下图这两首:&/p&&figure&&img src=&/v2-d2f1dc2a0f52fb98c573a_b.jpg& data-rawwidth=&489& data-rawheight=&191& class=&origin_image zh-lightbox-thumb& width=&489& data-original=&/v2-d2f1dc2a0f52fb98c573a_r.jpg&&&/figure&&br&&p& 又或者,将两部设计造型不同的汽车进行融合,形成全新一种设计风格的汽车造型。&/p&&figure&&img src=&/v2-1cb52ba3b5a5f1ace54a_b.jpg& data-rawwidth=&532& data-rawheight=&128& class=&origin_image zh-lightbox-thumb& width=&532& data-original=&/v2-1cb52ba3b5a5f1ace54a_r.jpg&&&/figure&&br&&p& 还有,之前大家在朋友圈里可能看过的,将相片转换成对应的艺术风格的画作。&/p&&figure&&img src=&/v2-044cf14329a9aba83dac907e_b.jpg& data-rawwidth=&529& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&529& data-original=&/v2-044cf14329a9aba83dac907e_r.jpg&&&/figure&&br&&p& 当前,人工智能已经在图像、语音等多个领域的技术上,取得了全面的突破。与此同时,另外一个问题随之而来,如果这一轮的AI浪潮真的将会掀起新的科技革命,那么在可预见的未来,我们整个互联网都将发生翻天覆地的变化,深刻影响我们的生活。&/p&&p&&strong&那么作为普通业务开发工程师的我,又应该以何种态度和方式应对这场时代洪流的冲击呢?&/strong&&/p&&p& 在回答这个问题之前,我们先一起看看上一轮由计算机信息技术引领的科技革命中,过去30多年中国程序员的角色变化:&/p&&figure&&img src=&/v2-5bbe0ce9fae5de2073b18e_b.jpg& data-rawwidth=&576& data-rawheight=&202& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/v2-5bbe0ce9fae5de2073b18e_r.jpg&&&/figure&&br&&p& 通过上图可以简总结:&strong&编程技术在不断地发展并且走向普及&/strong&,从最开始掌握在科学家和专家学者手中的技能,逐渐发展为一门大众技能。换而言之,我们公司内很多资深的工程师,如果带着今天对编程和计算机的理解和理念回到1980年,那么他无疑就是那个时代的计算机专家。&/p&&p& 如果这一轮AI浪潮真的会带来新的一轮科技革命,那么我们相信,它也会遵循类似的发展轨迹,逐步发展和走向普及。如果基于这个理解,或许,&strong&我们可以通过积极学习,争取成为第一代“AI工程师”。&/strong&&/p&&h2&二、深度学习技术&/h2&&p& 这一轮AI的技术突破,主要源于深度学习技术,而关于AI和深度学习的发展历史我们这里不再重复讲述,大家可自行查阅。&/p&&p& 我用了一个多月的业务时间,去了解和学习了深度学习技术,在这里,&strong&我尝试以一名业务开发工程师的视角,以尽量容易让大家理解的方式一起探讨下深度学习的原理&/strong&,尽管,受限于我个人的技术水平和掌握程度,未必完全准确。&/p&&h4&1. 人类智能和神经元&/h4&&p& 人类智能最重要的部分是大脑,大脑虽然复杂,它的组成单元却是相对简单的,大脑皮层以及整个神经系统,是由神经元细胞组成的。而一个神经元细胞,由树突和轴突组成,它们分别代表输入和输出。连在细胞膜上的分叉结构叫树突,是输入,那根长长的“尾巴”叫轴突,是输出。神经元输出的有电信号和化学信号,最主要的是沿着轴突细胞膜表面传播的一个电脉冲。&/p&&p& 忽略掉各种细节,&strong&神经元,就是一个积累了足够的输入,就产生一次输出(兴奋)的相对简单的装置。&/strong&&/p&&figure&&img src=&/v2-acf58a6ddb6c8b279a53451deec0f818_b.jpg& data-rawwidth=&575& data-rawheight=&457& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&/v2-acf58a6ddb6c8b279a53451deec0f818_r.jpg&&&/figure&&br&&p& 树突和轴突都有大量的分支,轴突的末端通常连接到其他细胞的树突上,连接点上是一个叫“突触”的结构。一个神经元的输出通过突触传递给成千上万个下游的神经元,神经元可以调整突触的结合强度,并且,有的突触是促进下游细胞的兴奋,有的是则是抑制。一个神经元有成千上万个上游神经元,积累它们的输入,产生输出。&/p&&figure&&img src=&/v2-14bd553c3eefbdbdc601b_b.jpg& data-rawwidth=&396& data-rawheight=&278& class=&content_image& width=&396&&&/figure&&br&&p& 人脑有1000亿个神经元,1000万亿个突触,它们组成人脑中庞大的神经网络,最终产生的结果即是人类智能。&/p&&h4&2. 人工神经元和神经网络&/h4&&p& 一个神经元的结构相对来说是比较简单的,于是,科学家们就思考,我们的AI是否可以从中获得借鉴?神经元接受激励,输出一个响应的方式,同计算机中的输入输出非常类似,看起来简直就是量身定做的,刚好可以用一个函数来模拟。&/p&&figure&&img src=&/v2-edc9b869a370ea368f0cb_b.jpg& data-rawwidth=&332& data-rawheight=&250& class=&content_image& width=&332&&&/figure&&br&&p& 通过借鉴和参考神经元的机制,科学家们模拟出了人工神经元和人工神经网络。当然,通过上述这个抽象的描述和图,比较难让大家理解它的机制和原理。我们以“房屋价格测算”作为例子,一起来看看:&/p&&blockquote&&p&一套房子的价格,会受到很多因素的影响,例如地段、朝向、房龄、面积、银行利率等等,这些因素如果细分,可能会有几十个。&strong&一般在深度学习模型里,这些影响结果的因素我们称之为特征&/strong&。我们先假设一种极端的场景,比如影响价格的特征只有一种,就是房子面积。然后我们收集一批相关的数据,例如,50平米50万、93平米95万等一系列样本数据,如果将这些样本数据放到二维坐标里看,则如下图:&/p&&/blockquote&&figure&&img src=&/v2-df1cdfbc7e69_b.jpg& data-rawwidth=&492& data-rawheight=&330& class=&origin_image zh-lightbox-thumb& width=&492& data-original=&/v2-df1cdfbc7e69_r.jpg&&&/figure&&br&&p& 然后,正如我们前面所说的,我们尝试用一个“函数”去拟合这个输入(面积x)和输出(价格y),简而言之,我们就是要通过一条直线或者曲线将这些点“拟合”起来。&/p&&p& 假设情况也比较极端,这些点刚好可以用一条“直线”拟合(真实情况通常不会是直线),如下图:&/p&&figure&&img src=&/v2-9f0bf410e40ef81f9a26c_b.jpg& data-rawwidth=&575& data-rawheight=&403& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&/v2-9f0bf410e40ef81f9a26c_r.jpg&&&/figure&&br&&p& 那么我们的函数是一个一次元方程f(x) = ax +b,当然,如果是曲线的话,我们得到的将是多次元方程。我们获得这个f(x) = ax +b的函数之后,接下来就可以做房价“预测”,例如,我们可以计算一个我们从未看见的面积案例81.5平方米,它究竟是多少钱?&/p&&p& 这个新的样本案例,可以通过直线找到对应的点(黄色的点),如图下:&/p&&figure&&img src=&/v2-2f5c32fcb8dcbf09e3dab3e29df9dc57_b.jpg& data-rawwidth=&575& data-rawheight=&402& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&/v2-2f5c32fcb8dcbf09e3dab3e29df9dc57_r.jpg&&&/figure&&br&&p& 粗略的理解,上面就是AI的概括性的运作方式。这一切似乎显得过于简单了?当然不会,因为,我们前面提到,影响房价其实远不止一个特征,而是有几十个,这样问题就比较复杂了,接下来,这里则要继续介绍深度学习模型的训练方式。&/p&&p&&strong&这部分内容相对复杂一点,我尽量以业务工程师的视角来做一个粗略而简单的阐述。&/strong&&/p&&h4&3. 深度学习模型的训练方式&/h4&&p& 当有好几十个特征共同影响价格的时候,自然就会涉及权重分配的问题,例如有一些对房价是主要正权重的,例如地段、面积等,也有一些是负权重的,例如房龄等。&/p&&p&&strong&(1)初始化权重计算&/strong&&br& 那么,第一个步其实是给这些特征加一个权重值,但是,最开始我们根本不知道这些权重值是多少?怎么办呢?不管那么多了,先给它们随机赋值吧。随机赋值,最终计算出来的估算房价肯定是不准确的,例如,它可能将价值100万的房子,计算成了10万。&/p&&p&&strong&(2)损失函数&/strong&&br& 因为现在模型的估值和实际估值差距比较大,于是,我们需要引入一个评估“不准确”程度的衡量角色,也就是损失(loss)函数,它是衡量模型估算值和真实值差距的标准,损失函数越小,则模型的估算值和真实值的察觉越小,而我们的根本目的,就是降低这个损失函数。让刚刚的房子特征的模型估算值,逼近100万的估算结果。&/p&&p&&strong&(3)模型调整&/strong&&br& 通过梯度下降和反向传播,计算出朝着降低损失函数的方向调整权重参数。举一个不恰当的比喻,我们给面积增加一些权重,然后给房子朝向减少一些权重(实际计算方式,并非针对单个个例特征的调整),然后损失函数就变小了。&/p&&p&&strong&(4)循环迭代&/strong&&br& 调整了模型的权重之后,就可以又重新取一批新的样本数据,重复前面的步骤,经过几十万次甚至更多的训练次数,最终估算模型的估算值逼近了真实值结果,这个模型的则是我们要的“函数”。&/p&&figure&&img src=&/v2-65f7c43f3c64df85183b98e_b.jpg& data-rawwidth=&576& data-rawheight=&517& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/v2-65f7c43f3c64df85183b98e_r.jpg&&&/figure&&br&&p& 为了让大家更容易理解和直观,采用的例子比较粗略,并且讲述深度学习模型的训练过程,中间省略了比较多的细节。&/p&&p&&strong&讲完了原理,那么我们就开始讲讲如何学习和搭建demo。&/strong&&/p&&h2&三、深度学习环境搭建&/h2&&p& 在2个月前,人工智能对我来说,只是一个高大上的概念。但是,经过一个多月的业余时间的认真学习,我发现还是能够学到一些东西,并且跑一些demo和应用出来的。&/p&&h4&1. 学习的提前准备&/h4&&p&&strong&(1)&/strong&部分数学内容的复习,高中数学、概率、线性代数等部分内容。(累计花费了10个小时,挑了关键的点看了下,其实还是不太够,只能让自己看公式的时候,相对没有那么懵)&br&&strong&(2)&/strong&Python基础语法学习。(花费了3个小时左右,我以前从未写过Python,因为后面Google的TensorFlow框架的使用是基于Python的)&br&&strong&(3)&/strong&Google的TensorFlow深度学习开源框架。(花费了10多个小时去看)&/p&&p& 数学基础好或者前期先不关注原理的同学,数学部分不看也可以开始做,全凭个人选择。&/p&&h4&2. Google的TensorFlow开源深度学习框架&/h4&&p& 深度学习框架,我们可以粗略的理解为是一个“数学函数”集合和AI训练学习的执行框架。通过它,我们能够更好的将AI的模型运行和维护起来。&/p&&p& 深度学习的框架有各种各样的版本(Caffe、Torch、Theano等等),我只接触了Google的TensorFlow,因此,&strong&后面的内容都是基于TensorFlow展开的&/strong&,它的详细介绍这里不展开讲述,建议直接进入官网查看。非常令人庆幸的是TensorFlow比较早就有中文社区了,尽管里面的内容有一点老,搭建环境方面有一些坑,但是已经属于为数不多的中文文档了,大家且看且珍惜。&/p&&blockquote&&p&TensorFlow的中文社区:&br&&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TensorFlow中文社区-首页&i class=&icon-external&&&/i&&/a&&br& TensorFlow的英文社区:&br&&a href=&/?target=https%3A//www.tensorflow.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&tensorflow.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&/blockquote&&h4&3. TensorFlow环境搭建&/h4&&p& 环境搭建本身并不复杂,主要解决相关的依赖。但是,基础库的依赖可以带来很多问题,因此,建议尽量一步到位,会简单很多。&/p&&p&&strong&(1)操作系统&/strong&&br& 我搭建环境使用的机器是腾讯云上的机器,软件环境如下:&br& 操作系统:CentOS 7.2 64位(GCC 4.8.5)&/p&&p& 因为这个框架依赖于python2.7和glibc 2.17。比较旧的版本的CentOS一般都是python2.6以及版本比较低的glibc,会产生比较的多基础库依赖问题。而且,glibc作为Linux的底层库,牵一发动全身,直接对它升级是比较复杂,很可能会带来更多的环境异常问题。&/p&&p&&strong&(2)软件环境&/strong&&br& 我目前安装的Python版本是python-2.7.5,建议可以采用yum install python的方式安装相关的原来软件。然后,再安装 python内的组件包管理器pip,安装好pip之后,接下来的其他软件的安装就相对比较简单了。&/p&&p& 例如安装TensorFlow,可通过如下一句命令完成(它会自动帮忙解决一些库依赖问题):&br& pip install -U tensorflow&/p&&p& 这里需要特别注意的是,不要按照TensorFlow的中文社区的指引去安装,因为它会安装一个非常老的版本(0.5.0),用这个版本跑很多demo都会遇到问题的。而实际上,目前通过上述提供的命令安装,是tensorflow (1.0.0)的版本了。&/p&&figure&&img src=&/v2-b79c40baf84f3a36a8f234d9a53dee2c_b.jpg& data-rawwidth=&575& data-rawheight=&68& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&/v2-b79c40baf84f3a36a8f234d9a53dee2c_r.jpg&&&/figure&&br&&p& Python(2.7.5)下的其他需要安装的关键组件:&/p&&ul&&li&tensorflow (0.12.1),深度学习的核心框架&/li&&li&image (1.5.5),图像处理相关,部分例子会用到&/li&&li&PIL (1.1.7),图像处理相关,部分例子会用到&/li&&/ul&&p& 除此之后,当然还有另外的一些依赖组件,通过pip list命令可以查看我们安装的python组件:&/p&&ul&&li&appdirs (1.4.0)&/li&&li&backports.ssl-match-hostname (3.4.0.2)&/li&&li&chardet (2.2.1)&/li&&li&configobj (4.7.2)&/li&&li&decorator (3.4.0)&/li&&li&Django (1.10.4)&/li&&li&funcsigs (1.0.2)&/li&&li&image (1.5.5)&/li&&li&iniparse (0.4)&/li&&li&kitchen (1.1.1)&/li&&li&langtable (0.0.31)&/li&&li&mock (2.0.0)&/li&&li&numpy (1.12.0)&/li&&li&packaging (16.8)&/li&&li&pbr (1.10.0)&/li&&li&perf (0.1)&/li&&li&PIL (1.1.7)&/li&&li&Pillow (3.4.2)&/li&&li&pip (9.0.1)&/li&&li&protobuf (3.2.0)&/li&&li&pycurl (7.19.0)&/li&&li&pygobject (3.14.0)&/li&&li&pygpgme (0.3)&/li&&li&pyliblzma (0.5.3)&/li&&li&pyparsing (2.1.10)&/li&&li&python-augeas (0.5.0)&/li&&li&python-dmidecode (3.10.13)&/li&&li&pyudev (0.15)&/li&&li&pyxattr (0.5.1)&/li&&li&setuptools (34.2.0)&/li&&li&six (1.10.0)&/li&&li&slip (0.4.0)&/li&&li&slip.dbus (0.4.0)&/li&&li&tensorflow (1.0.0)&/li&&li&urlgrabber (3.10)&/li&&li&wheel (0.29.0)&/li&&li&yum-langpacks (0.4.2)&/li&&li&yum-metadata-parser (1.1.4)&/li&&/ul&&p& 按照上述提供的来搭建系统,可以规避不少的环境问题。&/p&&p& 搭建环境的过程中,我遇到不少问题。&/p&&blockquote&&p&例如:在跑官方的例子时的某个报错,AttributeError: ‘module’ object has no attribute ‘gfile’,就是因为安装的TensorFlow的版本比较老,缺少gfile模块导致的。而且,还有各种各样的。(不要问我是怎么知道的,说多了都是泪啊~)&/p&&/blockquote&&p& 更详细的安装说明:&br&&a href=&/?target=https%3A//www.tensorflow.org/install/install_linux& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&tensorflow.org/install/&/span&&span class=&invisible&&install_linux&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&strong&(3)TensorFlow环境测试运行&/strong&&br& 测试是否安装成功,可以采用官方的提供的一个短小的例子,demo生成了一些三维数据, 然后用一个平面拟合它们(官网的例子采用的初始化变量的函数是initialize_all_variables,该函数在新版本里已经被废弃了):&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span& #!/usr/bin/python
#coding=utf-8
import tensorflow as tf
import numpy as np
# 使用 NumPy 生成假数据(phony data), 总共 100 个点.
x_data = np.float32(np.random.rand(2, 100)) # 随机输入
y_data = np.dot([0.100, 0.200], x_data) + 0.300
# 构造一个线性模型
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b
# 最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# 初始化变量,旧函数(initialize_all_variables)已经被废弃,替换为新函数
init = tf.global_variables_initializer()
# 启动图 (graph)
sess = tf.Session()
sess.run(init)
# 拟合平面
for step in xrange(0, 201):
sess.run(train)
if step % 20 == 0:
print step, sess.run(W), sess.run(b)
# 得到最佳拟合结果 W: [[0.100
0.200]], b: [0.300]
&/code&&/pre&&/div&&p& 运行的结果类似如下:&/p&&figure&&img src=&/v2-33031decc77b9d3b22f57c50_b.jpg& data-rawwidth=&439& data-rawheight=&185& class=&origin_image zh-lightbox-thumb& width=&439& data-original=&/v2-33031decc77b9d3b22f57c50_r.jpg&&&/figure&&br&&p& 经过200次的训练,模型的参数逐渐逼近最佳拟合的结果(W: [[0.100
0.200]], b: [0.300]),另外,我们也可以从代码的“风格”中,了解到框架样本训练的基本运行方式。虽然,官方的教程后续会涉及越来越多更复杂的例子,但从整体上看,也是类似的模式。&/p&&figure&&img src=&/v2-0cf345fab7068bae49620d_b.jpg& data-rawwidth=&576& data-rawheight=&56& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/v2-0cf345fab7068bae49620d_r.jpg&&&/figure&&br&&p& 步骤划分:&/p&&ul&&li&&p&&strong&准备数据&/strong&:获得有标签的样本数据(带标签的训练数据称为有监督学习);&/p&&/li&&li&&p&&strong&设置模型&/strong&:先构建好需要使用的训练模型,可供选择的机器学习方法其实也挺多的,换而言之就是一堆数学函数的集合;&/p&&/li&&li&&p&&strong&损失函数和优化方式&/strong&:衡量模型计算结果和真实标签值的差距;&/p&&/li&&li&&p&&strong&真实训练运算&/strong&:训练之前构造好的模型,让程序通过循环训练和学习,获得最终我们需要的结果“参数”;&/p&&/li&&li&&p&&strong&验证结果&/strong&:采用之前模型没有训练过的测试集数据,去验证模型的准确率。&/p&&/li&&/ul&&p& 其中,TensorFlow为了基于python实现高效的数学计算,通常会使用到一些基础的函数库,例如Numpy(采用外部底层语言实现),但是,从外部计算切回到python也是存在开销的,尤其是在几万几十万次的训练过程。因此,Tensorflow不单独地运行单一的函数计算,而是先用图描述一系列可交互的计算操作流程,然后全部一次性提交到外部运行(在其他机器学习的库里,也是类似的实现)。所以,上述流程图中,蓝色部分都只是设置了“计算操作流程”,而绿色部分开始才是真正的提交数据给到底层库进行实际运算,而且,每次训练一般是批量执行一批数据的。&/p&&h2&四、经典入门demo:识别手写数字(MNIST)&/h2&&p& 常规的编程入门有“Hello world”程序,而深度学习的入门程序则是MNIST,一个识别28*28像素的图片中的手写数字的程序。&/p&&figure&&img src=&/v2-19e45fccbbd5320bff03c8_b.jpg& data-rawwidth=&317& data-rawheight=&80& class=&content_image& width=&317&&&/figure&&br&&blockquote&&p&MNIST的数据和官网:&br&&a href=&/?target=http%3A///exdb/mnist/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges&i class=&icon-external&&&/i&&/a&&/p&&/blockquote&&p& 深度学习的内容,其背后会涉及比较多的数学原理,作为一个初学者,受限于我个人的数学和技术水平,也许并不足以准确讲述相关的数学原理,因此,本文会更多的关注“应用层面”,不对背后的数学原理进行展开,感谢谅解。&/p&&h4&1. 加载数据&/h4&&p& 程序执行的第一步当然是加载数据,根据我们之前获得的数据集主要包括两部分:60000的训练数据集(mnist.train)和10000的测试数据集(mnist.test)。里面每一行,是一个28&em&28=784的数组,数组的本质就是将28&/em&28像素的图片,转化成对应的像素点阵。&/p&&p& 例如手写字1的图片转换出来的对应矩阵表示如下:&/p&&figure&&img src=&/v2-2ecec2df6de0e472a432fb7d3f9a4105_b.jpg& data-rawwidth=&575& data-rawheight=&221& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&/v2-2ecec2df6de0e472a432fb7d3f9a4105_r.jpg&&&/figure&&br&&p& 之前我们经常听说,图片方面的深度学习需要大量的计算能力,甚至需要采用昂贵、专业的GPU(Nvidia的GPU),从上述转化的案例我们就已经可以获得一些答案了。一张784像素的图片,对学习模型来说,就有784个特征,而我们实际的相片和图片动辄几十万、百万级别,则对应的基础特征数也是这个数量级,基于这样数量级的数组进行大规模运算,没有强大的计算能力支持,确实寸步难行。当然,这个入门的MNIST的demo还是可以比较快速的跑完。&/p&&p& Demo中的关键代码(读取并且加载数据到数组对象中,方便后面使用):&/p&&figure&&img src=&/v2-61ec7ff69f4d095a457a85cd6478ebde_b.jpg& data-rawwidth=&575& data-rawheight=&85& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&/v2-61ec7ff69f4d095a457a85cd6478ebde_r.jpg&&&/figure&&br&&h4&2. 构建模型&/h4&&p& MNIST的每一张图片都表示一个数字,从0到9。而模型最终期望获得的是:给定一张图片,获得代表每个数字的概率。比如说,模型可能推测一张数字9的图片代表数字9的概率是80%但是判断它是8的概率是5%(因为8和9都有上半部分的小圆),然后给予它代表其他数字的概率更小的值。&/p&&figure&&img src=&/v2-c901e6cf1_b.jpg& data-rawwidth=&306& data-rawheight=&162& class=&content_image& width=&306&&&/figure&&br&&p& MNIST的入门例子,采用的是softmax回归(softmax regression),softmax模型可以用来给不同的对象分配概率。&/p&&p& 为了得到一张给定图片属于某个特定数字类的证据(evidence),我们对图片的784个特征(点阵里的各个像素值)进行加权求和。如果某个特征(像素值)具有很强的证据说明这张图片不属于该类,那么相应的权重值为负数,相反如果某个特征(像素值)拥有有利的证据支持这张图片属于这个类,那么权重值是正数。类似前面提到的房价估算例子,对每一个像素点作出了一个权重分配。&/p&&p& 假设我们获得一张图片,需要计算它是8的概率,转化成数学公式则如下:&/p&&figure&&img src=&/v2-a77a92f1f5a40de03111_b.jpg& data-rawwidth=&257& data-rawheight=&74& class=&content_image& width=&257&&&/figure&&br&&p& 公式中的i代表需要预测的数字(8),代表预测数字为8的情况下,784个特征的不同权重值,代表8的偏置量(bias),X则是该图片784个特征的值。通过上述计算,我们则可以获得证明该图片是8的证据(evidence)的总和,softmax函数可以把这些证据转换成概率 y。(softmax的数学原理,辛苦各位查询相关资料哈)&/p&&p& 将前面的过程概括成一张图(来自官方)则如下:&/p&&figure&&img src=&/v2-bd8ad3a500b80d4c856286_b.jpg& data-rawwidth=&576& data-rawheight=&230& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/v2-bd8ad3a500b80d4c856286_r.jpg&&&/figure&&br&&p& 不同的特征x和对应不同数字的权重进行相乘和求和,则获得在各个数字的分布概率,取概率最大的值,则认为是我们的图片预测结果。&/p&&p& 将上述过程写成一个等式,则如下:&/p&&figure&&img src=&/v2-96e5f66d11dbaa1fec6802_b.png& data-rawwidth=&1912& data-rawheight=&440& class=&origin_image zh-lightbox-thumb& width=&1912& data-original=&/v2-96e5f66d11dbaa1fec6802_r.png&&&/figure&&br&&p& 该等式在矩阵乘法里可以非常简单地表示,则等价为:&/p&&figure&&img src=&/v2-f032f1c225aef190c50c0_b.jpg& data-rawwidth=&576& data-rawheight=&143& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/v2-f032f1c225aef190c50c0_r.jpg&&&/figure&&br&&p& 不展开里面的具体数值,则可以简化为:&/p&&figure&&img src=&/v2-97e71fb16fdc7b1425023_b.jpg& data-rawwidth=&220& data-rawheight=&48& class=&content_image& width=&220&&&/figure&&br&&p& 如果我们对线性代数中矩阵相关内容有适当学习,其实,就会明白矩阵表达在一些问题上,更易于理解。如果对矩阵内容不太记得了,也没有关系,后面我会附加上线性代数的视频。&/p&&p& 虽然前面讲述了这么多,其实关键代码就四行:&/p&&figure&&img src=&/v2-7fe697f44_b.jpg& data-rawwidth=&458& data-rawheight=&90& class=&origin_image zh-lightbox-thumb& width=&458& data-original=&/v2-7fe697f44_r.jpg&&&/figure&&br&&p& 上述代码都是类似变量占位符,先设置好模型计算方式,在真实训练流程中,需要批量读取源数据,不断给它们填充数据,模型计算才会真实跑起来。tf.zeros则表示,先给它们统一赋值为0占位。X数据是从数据文件中读取的,而w、b是在训练过程中不断变化和更新的,y则是基于前面的数据进行计算得到。&/p&&h4&3. 损失函数和优化设置&/h4&&p& 为了训练我们的模型,我们首先需要定义一个指标来衡量这个模型是好还是坏。这个指标称为成本(cost)或损失(loss),然后尽量最小化这个指标。简单的说,就是我们需要最小化loss的值,loss的值越小,则我们的模型越逼近标签的真实结果。&/p&&p& Demo中使用的损失函数是“交叉熵”(cross-entropy),它的公式如下:&/p&&figure&&img src=&/v2-8ec0b9c0fb6c00d4c6452fb53acd98c2_b.jpg& data-rawwidth=&229& data-rawheight=&73& class=&content_image& width=&229&&&/figure&&br&&p& y 是我们预测的概率分布, y’ 是实际的分布(我们输入的),交叉熵是用来衡量我们的预测结果的不准确性。TensorFlow拥有一张描述各个计算单元的图,也就是整个模型的计算流程,它可以自动地使用反向传播算法(backpropagation algorithm),来确定我们的权重等变量是如何影响我们想要最小化的那个loss值的。然后,TensorFlow会用我们设定好的优化算法来不断修改变量以降低loss值。&/p&&p& 其中,demo采用梯度下降算法(gradient descent algorithm)以0.01的学习速率最小化交叉熵。梯度下降算法是一个简单的学习过程,TensorFlow只需将每个变量一点点地往使loss值不断降低的方向更新。&br& 对应的关键代码如下:&/p&&figure&&img src=&/v2-cfc7b7c8b93e82e44e3a2ed_b.jpg& data-rawwidth=&576& data-rawheight=&58& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/v2-cfc7b7c8b93e82e44e3a2ed_r.jpg&&&/figure&&br&&blockquote&&p&备注内容:&br& 交叉熵:&a href=&/?target=http%3A//colah.github.io/posts/2015-09-Visual-Information/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Visual Information Theory&i class=&icon-external&&&/i&&/a&&br& 反向传播:&a href=&/?target=http%3A//colah.github.io/posts/2015-08-Backprop/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Calculus on Computational Graphs: Backpropagation&i class=&icon-external&&&/i&&/a&&/p&&/blockquote&&p& 在代码中会看见one-hot vector的概念和变量名,其实这个是个非常简单的东西,就是设置一个10个元素的数组,其中只有一个是1,其他都是0,以此表示数字的标签结果。&/p&&p& 例如表示数字3的标签值:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span& [0,0,0,1,0,0,0,0,0,0]
&/code&&/pre&&/div&&h4&4. 训练运算和模型准确度测试&/h4&&p& 通过前面的实现,我们已经设置好了整个模型的计算“流程图”,它们都成为TensorFlow框架的一部分。于是,我们就可以启动我们的训练程序,下面的代码的含义是,循环训练我们的模型500次,每次批量取50个训练样本。&/p&&figure&&img src=&/v2-363ee10f083d9a173db2ab_b.jpg& data-rawwidth=&522& data-rawheight=&85& class=&origin_image zh-lightbox-thumb& width=&522& data-original=&/v2-363ee10f083d9a173db2ab_r.jpg&&&/figure&&br&&p& 其训练过程,其实就是TensorFlow框架的启动训练过程,在这个过程中,python批量地将数据交给底层库进行处理。&/p&&p& 我在官方的demo里追加了两行代码,每隔50次则额外计算一次当前模型的识别准确率。它并非必要的代码,仅仅用于方便观察整个模型的识别准确率逐步变化的过程。&/p&&figure&&img src=&/v2-a071727ebbb20a1d50ff662d0f240324_b.jpg& data-rawwidth=&576& data-rawheight=&26& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/v2-a071727ebbb20a1d50ff662d0f240324_r.jpg&&&/figure&&br&&p& 当然,里面涉及的accuracy(预测准确率)等变量,需要在前面的地方定义占位:&/p&&figure&&img src=&/v2-3864e72b_b.jpg& data-rawwidth=&576& data-rawheight=&35& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/v2-3864e72b_r.jpg&&&/figure&&br&&p& 当我们训练完毕,则到了验证我们的模型准确率的时候,和前面相同:&/p&&figure&&img src=&/v2-f55ac497dfd7_b.jpg& data-rawwidth=&575& data-rawheight=&38& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&/v2-f55ac497dfd7_r.jpg&&&/figure&&br&&p& 我的demo跑出来的结果如下(softmax回归的例子运行速度还是比较快的),当前的准确率是0.9252:&/p&&figure&&img src=&/v2-fa9eb32d9395ba8edb6f1b0a_b.jpg& data-rawwidth=&370& data-rawheight=&195& class=&content_image& width=&370&&&/figure&&br&&h4&5. 实时查看参数的数值的方法&/h4&&p& 刚开始跑官方的demo的时候,我们总想将相关变量的值打印出来看看,是怎样一种格式和状态。从demo的代码中,我们可以看见很多的Tensor变量对象,而实际上这些变量对象都是无法直接输出查看,粗略地理解,有些只是占位符,直接输出的话,会获得类似如下的一个对象:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span& Tensor(&Equal:0&, shape=(?,), dtype=bool)
&/code&&/pre&&/div&&p& 既然它是占位符,那么我们就必须喂一些数据给它,它才能将真实内容展示出来。因此,正确的方法是,在打印时通常需要加上当前的输入数据给它。&/p&&p& 例如,查看y的概率数据:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span& print(sess.run(y, feed_dict={x: batch_xs, y_: batch_ys}))
&/code&&/pre&&/div&&p& 部分非占位符的变量还可以这样输出来:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&spa}

我要回帖

更多关于 地下城与勇士 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信