专业文科30年零基础学神经网络TensorFlow

原创 2018年04月16日 13:37:08

辛辛苦苦大学毕业,走上外贸岗位。 外贸惨呐,白天联系车间生产,晚上回家和国外客户沟通。TMD老板还要求每天在alibaba发30个listing。你说好好的一个销售,有业绩不就行了,居然还有这种KPI,真是是可忍孰不可忍。

不过这也难不倒我,拿出当年大航海时代,从伊比利亚半岛开船去北非海岸挖矿的精神,重新拾起按键精灵开始发产品。(看,谁说网游害人,大航海时代ol不就教会我用脚本采矿么。。。呃,呸,是提高生产效率)

一入豪门深似海,动起了偷懒的歪念头,慢慢的python、selenium也就学起来了。虽然产品发地快了,alibaba会提示输入验证码。但就算慢一点发,一晚上发上千个listing还是很轻松的,一天30个的KPI?哼,米粒之珠,也敢与日月争辉。

虽然发listing方便了,但验证码这个问题不是没解决过么,上星期手贱百度了下,结果发现训练围棋AlphaGo的神经网络居然可以识别验证码,网上还这么多的教程。对于我这个专业文科30年的大叔来说,这么高端酷炫屌朝天的东西,这么多Tensorflow教程居然触手可得,必须得果断入坑。

嗯,真实感受就是入坑,因为我找了很多教学视频,感受都是这样:

大神:好了,我们开始从头开始讲解,首先,1+1=2,2+2=4,……

我:很简单嘛,喝口水先。

大神:所以,@#¥%&*!#¥%&*!##¥#……

我:等等,我忽略了什么?赶紧重听。嗯,果真每个音都听到了,只是完全不知道这个音对应哪个词而已。

于是,就有了写这个文章的动力,因为大概一个星期的时间,6天都在找能看的懂的资料,剩下1天才用来初步了解神经网络是什么一回事。所以我把这一个星期找到的,对于我这个初级者有用的资料整理出来,帮助和我一样的老年文科生零基础入门。

既然是零基础,有多零呢?这么说吧,一个小时前,我还在看学而思的高中数学视频,正看到点到直线的距离公式。

嗯,高中,嗯,捂脸。。

所以,真的很零。

一、Python入门

既然是编程,那编程语言一定要会一门。不要挑了,人生苦短,你要学Python。这里推荐传智播客的视频教程

我是在youtube上看的,传智播客的Python14天基础班。如果不能科学上网,估计其他的网站也有。

网上的教程很多,但要么是大神讲天书,跳过N多我们不理解的步骤,要么是玩票兴致,几分钟浅进浅出、科普而已。传智播客的N个教程,感觉都很好,是真的把人当傻子般系统的教学。从 cd dir查看目录等系统操作教起,而且整个基础班系列只要14天就可以学完。每天不过2个多小时。

二、如何理解神经网络

不过既然从百度中搜到这篇文章,你肯定已经会python等语言了。那么首先推荐看一下周莫烦的教学视频:Tensorflow 搭建自己的神经网络 (莫烦 Python 教程)

从第一集“什么是神经网络”看到第6集“如何安装tensorflow”就好了,一集5分钟,半小时看完。后面的视频是给有一定基础的人看的,直接看就会像我一样,云里雾里,对自己的智商产生深刻的怀疑。

这也是很多大神视频的通常情况,他们通常会省略那些“傻子”都会的问题,但对于我这种文科生而言,傻子呓语亦犹如天书。

连续看了4、5个人的视频,没一个我能看懂。每一个都是上一集在讲如何安装tensorflow,下一集就手把手的教你写2层神经网络。我还不知道什么是神经网络,什么是神经元啊!怎么就讲起如何构建2层神经网络了。而且为啥是2层、不是3层?不是1层?怎么一言不合写代码了。。。而且是一边写代码,一边随口解释,写完代码教程就结束了??真真是感受到了理科世界的恶意。。。

然后本来都要放弃了,幸好发现了这片文章:

神经网络入门----阮一峰的网络日志

看完这篇,我才知道了,神经网络到底是怎么回事,才知道大神们在视频中到底是做什么。。。

这篇文章的主要内容来自:

Neural Networks and Deep Learning

在辛辛苦苦的看了半天英文版之后,突然想起来,这是1年前的教材,肯定有人已经翻译了啊,于是又在CSDN上找到了中文翻译版:

《神经网络与深度学习》

20个积分就可以下载,记住,不要下载那个便宜的、冒充中文版的PDF,现在的人真是没底线啊,可怜我一共才几十个积分。。。


三、思路与实现

其实看了上面的神经网络入门,就应该有了基本的神经网络思路了。我们再拓展一下,假设周末出门,我们有3个种选择,

y1去正大广场看LOL比赛,

y2去植物园踏青,

y3楼下花园散步。

影响我们判断的因素还是

x1天气情况,

x2交通情况,

x3是否有人相陪。

以及x1 x2 x3因素的权重W、负阈值b等。(如上图所示)

同样是下雨,对于我去看室内比赛 和 野外踏青的影响是不同的,所以权重W不同。每件事情在我心里的重量不同,所以阈值b不同。

即,3个y是对应着3组不同的(w1 w2 w3 b),即

y1 = w1,1 * x1 + w1,2 *x2 + w1,3 *x +b

y2 = w2,1 * x1 + w2,2 *x2 + w2,3 *x +b

y3 = w3,1 * x1 + w3,2 *x2 + w3,3 *x +b

假设:

在过去的一年中,有52个周末,我作出了52次选择。这52次选择就是y1 y2 和y3;这52个周日的天气情况、交通状况、朋友相约次数这3个x都记录在案。那么神经网络会根据y 和 x 通过反复计算,获得每个y对应的3个W 和1个b的值。

那么,下一个周末,给出天气、交通、朋友这3个x1 x2 x3 ,神经网络就可以用套上9个W 和3个b,计算出y1,y2,y3的值,最大的那个y就是我周末的最优选择。

同理,城市预测周末出行人数,也是这个道理。

sigmoid函数

好,在看神经网络入门中,会产生一个疑问,可以用简单的1 和 0来表示x吗?比如,有没有朋友相约,有就是1,没有就是0。但如果是天气,晴天、阴天、刮风、下雨,对于我周末出门选择是有不同的影响,不能用简单的1和0表示。入门中,介绍了sigmoid函数。可以用sigmoid函数,计算晴天阴天刮风下雨等情况,给出一个0-1的天气值作为那个x1。

softmax函数

神经网络入门这篇中只举例一个情况,去不去参加动漫展览,即只有一个y。那只要Y大于0,就可以去看动漫展览了。

但实际情况更可能是上面我举的例子,周末有y1 y2 y3等多种选择。如果y1=30,y2=10,y3=2。我们当然是选y1。但如果y1=30,y2=28,y3=9,让我们做选择,在一年的52个周末里,我们真的是选择52次y1,而不去选择一次y2吗?

真实世界中,如果两件事差不多,y1=30  y2=28,我们恐怕会去踏青几次吧,而不是100%选lol。

那30,10,2,或者30 28 9这样的数值中如何选择最合理的最大值呢?这里就是softmax软最大值函数的舞台了。

关于softmax可以看一下极客学院的MINIST机器学习入门,然后再百科下,更详细。softmax可以根据每个值的大小,推算出概率,比如30 10 2中,30的概率是0.999999,无限接近于1了;而 30 28 9中,30的概率0.88,28的概率0.11,9无限接近0。

理解了神经元工作方式,和sigmoid、softmax等函数。就可以用tensorflow完成这个思路了。


四、大数据与矩阵

上面说过,一年中,我们有52个周末的记录,即52个 y1y2y3 和52个 x1x2x3。那我们怎么输入这么大的数据计算呢?

总不能手打这52*3个公式吧?如果是一个城市,几十万个出行数据需要计算,手打几十万个y=wx+b,还不要累死?

这就涉及到数据是怎么在电脑中储存的。

假设只有一个影响因素x,一个选择y:

即,y = w*x +b

一年52个周末,外出用1表示,家里蹲用0表示,那么y就是一个由0和1组成,共52个0和1的列表—— [0,0,……,1,1] 

(试着想象一个excel表格,第一个格子写着出行记录,后面跟着52个格子,分别写着0,0,……0,1,1)

x天气情况是[0,0.3,……,0,0.9] (共计52个0-1之间的数值)

权重Weights是w,负阈值是 b 。

所以我们只要有一种运算方式,可以计算w* [0,0.3,……,0,0.9]   + b 的值(w*x+b),

并且电脑经过反复猜测w、b的值,

最终使得 w*[0,0.3,……,0,0.9]+b 约等于y的[0,0,……,1,1] 了,

那么就求出权重和负阈值了。

这种1个数和一组数、一组数和另一组数之间的加减乘除就是矩阵了。


还是解释的太烂,推荐走起。

首先是 阮一峰的网络日志 理解矩阵乘法,这个真的很不错,必看。

然后是 B站上学而思的60小时学完高中数学,推荐全部看完,但如果你和我一样,白天晚上都要挤时间,那就看41-45好了,不做习题的话1个小时就可以看完。

最后是 18张宇线性代数基础班+强化班,看第8P就可以了,半小时。

看完后,数学方面矩阵的内容就初步了解了。剩下的就是怎样在编程中怎么实现对应的操作。比如,两个数字相乘,在电脑中用*星号表示“乘”,两个矩阵相乘,用np.matmul(w,x)表示。

这里推荐周莫烦的 Numpy & Pandas (莫烦 Python 数据处理教程)

只看前半段Numpy就可以了。Numpy是关于python中矩阵操作的库。也很快,1个小时吧。

其实他还有个matlibplot画图教学,也挺有意思的,推荐顺便看下。

五、最后实践

好,那到这里,你应该已经基本可以独立完成神经网络的入门MINIST操作了。MINIST包含了6+1万个手写阿拉伯数字,来自美国人口普查局2组共计500人的手写记录。

手写文字识别、人脸识别之类的事情对于人类来说很简单,睁眼就会。但对于传统编程来说,这事难于登天。所幸机器学习解决了这个问题。

在所有机器学习的项目中,手写文字识别最经典,也对电脑配置的要求最低,我是一台air上网本,没有GPU,识别MINIST也就是7 8秒的事。所以MINIST被各个教材、视频用来入门教学。

所以,如果之前的视频你都多看几集,那么tensorflow的基本操作Variable, Placeholder,feed_dict等等你应该已经都会了。可以自己动手完成MINIST了。

如果没看,推荐youtube上炼数成金的tensorflow十课中的第二课,讲的是创建变量、占位符、fetch、feed等,不能上外网的话,周莫烦的视频中也讲了一部分。

不过他们都是只讲了自己代码中用到的部分,这里有个博客tensorflow基础命令,写的比较全。

学会基本操作,再结合上文的《神经网络与深度学习》极客学院的MINIST机器学习入门,应该是真的、真的、真的零障碍入门了。

当然,你也可以像我一样,从廖雪峰的官方网站上下载一段pillow代码,自己生成0-9的随机数字,自己破解,更有意思。感觉自己就要破解验证码,当上CEO,迎娶白富美,走上人生巅峰了。想想还有点小激动呢!

专业文科30年零基础学神经网络TensorFlow

辛辛苦苦大学毕业,走上外贸岗位。 外贸惨呐,白天联系车间生产,晚上回家和国外客户沟通。TMD老板还要求每天在alibaba发30个listing。你说好好的一个销售,有业绩不就行了,居然还有这种KPI...
  • earth9
  • earth9
  • 2018-04-16 13:37:08
  • 447

神经网络入门

神经网络入门 作者: 阮一峰 日期: 2017年7月13日 眼下最热门的技术,绝对是人工智能。 人工智能的底层模型是"神经网络"(neu...
  • lly20000
  • lly20000
  • 2017-07-14 17:54:46
  • 327

0基础,30岁,我都学会了,你还犹豫什么?

0基础,30岁,我都学会了,你还犹豫什么? 一位2011年的老学员在53kf客服上与我们的老师取得联系,述说自己当时年近30岁零基础选择来传智播客的感受,回顾自己曾经在传智播客学习生活,忆往日,...
  • RUHUA111
  • RUHUA111
  • 2015-01-21 09:09:58
  • 545

一名文科生转行成软件工程师的经历

刚毕业,找不到工作,进入IT领域,先从“网页制作”开始 我是2000年大专毕业,在学校学的是“贸易经济”专业,大家都知道,这种经济专业特别虚,我学了三年是什么都没学到,完全是混过来的,考试前两天...
  • phphot
  • phphot
  • 2009-06-04 21:55:00
  • 3625

阮一峰的网络日志

http://www.ruanyifeng.com/blog/
  • dbhllnr
  • dbhllnr
  • 2016-07-07 14:57:42
  • 203

阮一峰老师的blog共享知识

http://www.ruanyifeng.com/blog/
  • qq_14855277
  • qq_14855277
  • 2017-06-23 09:59:02
  • 109

零基础学TensorFlow(二):初识TensorFlow

前言第一篇文章中我们成功的安装了TensorFlow,并且在代码中引入了TensorFlow。但是对于零基础的我来说,仍然没有搞清楚TensorFlow是个什么东东(相信很多人都感觉这水平很low),...
  • wenanshi
  • wenanshi
  • 2017-06-29 17:52:06
  • 454

【从零开始学习Tensorflow】(一)第3章 TensorFlow入门

转载请注明作者和出处: https://blog.csdn.net/weixin_37392582 开发平台: Win10 + Python3.6 + Anaconda3 编  者: 无尾 ...
  • weixin_37392582
  • weixin_37392582
  • 2018-04-04 11:10:30
  • 42

阮一峰的网络日志

http://www.ruanyifeng.com/blog/archives.html
  • yuer2008200820008
  • yuer2008200820008
  • 2016-12-24 09:40:58
  • 141

阮一峰的网络日志 » 首页 » 档案

http://www.ruanyifeng.com/blog/developer/ http://www.ruanyifeng.com/blog/developer/ http://www.ruan...
  • zyex1108
  • zyex1108
  • 2016-06-27 14:34:34
  • 400
收藏助手
不良信息举报
您举报文章:专业文科30年零基础学神经网络TensorFlow
举报原因:
原因补充:

(最多只允许输入30个字)