我的人工智能学习之路-从无到有精进之路

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinox2010p1/article/details/80467475

我是在2016年底决定学习人工智能的,当时我经常阅读csdn的人工智能文章,并且经常评论,但是大多看不懂,评论也不靠谱,最多是表决心之类的评论,但是并没有真的去学习。

当时了解的是用 python开发机器学习,深度学习,后来还知道十大框架,tensoflow等,当时还在了解这些框架谁好谁坏,总是还是在门外。对python也不了解。

在阅读人工智能文章中,我发现王小草博客写的文章简单易懂条理清晰而且内容丰富,读了几篇后我决定把她的文章读完,于是断断续续用了几个月把她的文章读完了,估计有50篇以上,我觉得我要进入人工智能大门了,我要成功了!

于是我安装pycharm开始写人工智能程序,写了个爬虫从网上获取数据,然后输入scikit-learn的机器学习模型训练,把结果输入预测,没有几行代码,可是结果发现预测不对,怎么回事呢,再写复杂一点代码,就不行了,写不下去了。

主要是对python语法和用法不熟悉,写不出复杂一点python程序,然后呢,机器学习为什么要训练,然后才能预测,而且预测要干什么呢?为什么要预测?机器学习和深度学习又有什么不同呢?为什么要用这个学习算法而而不用那个学习算法。

做不下去了。随机森林为什么效果可以追上深度学习呢?学习人工智能没那么简单,以前我学习一门计算机语言一两个月就可以了,现在半年过去了,人工智能的门还没进。

我不是那么容易服输的人。

既然只看网上文章不行,就买书来看。那段时间我在家,有时间,先看了一本matlab,因为我看到网上招聘人工智能要掌握哪些技能,我就学那些,看了一本python高级开发,看了一遍估计能看懂一半,python语法跟其他语言有差别。基本上一周能看一本,看python机器学习算法,大战机器学习,tensorflow实战,机器学习算法原理和实践,tensorflow框架,看到后面越懂越多,看了几个月,感觉自己行了。怎么做呢,要实战,不能总是学习吧?应聘去。

看到网上有招聘人工智能的,投简历,没回应,可能读几本书还不能让人心动要招聘吧。最后终于有个回应了,让我去面试,于是去了,几个人面试,问了各种问题,主要是应聘人员对人工智能也了解不多,所以我就按照看的书回答他们,实在不懂就说还没研究过。但是毕竟读过书,虽然没有按照阿里面试这样针对题目背一遍,对答如流,不过也能说个三四。几天后应聘通过,可以去上班了,工资明显超过程序员。看来学习人工智能没白学。

进入公司后开始学习深度学习,读了3本深度学习和tensoflow书籍,有两本是英文的,幸好英语过六级,读下来有几个单词不懂,可以查字典,基本能读懂,增强学习就是在深度学习原理搞懂的,之前看了tensorflow实战也没看懂。还有卷积神经网络也慢慢搞懂了,还研究tensowflow编译,tensowflow架构和源码,深入tensorflowapi,tfrecord等。最后实践了两个项目,一维卷积神经网络学习波形,二维卷积神经网络用来识别图片,可能样本较少,只有80%左右准确率。还用了keras,tensorlayer等架构编程。研究vgg,resnet等网络。自己尝试设计自己的神经网络。进入公司才是真正地学习人工智能。

熟悉和熟练python也是一个过程。对于循环for类似c++,range是左闭右开,应该是类似for(int i=0;i<N;i++),但是for不能修改循环因子,我改用while,这样才能跳过循环因子。range,xrange,enumerate这三个有什么区别呢?碰到的各种不理解,我都是上网查找答案,不过看一两次还是没记住。比如切片骗,p[::-1],list[:,-1],碰了好多次上网查阅资料才搞明白,lamba还是太高级,只能看别人写的,自己写不了。python代码块是通过对齐来识别的,不像c语言用大括号,pascal用begin和end,python使用Tab和空格来对齐,子模块要退格,不能tab和空格混用,不然容易报错,我经常报错,还看不懂错在哪里,最后让ue,notepad显示空格才看见,不过不好看,记事本没办法了。go语言就是摒弃这个错误,用英文标记代码段的开头和结尾。诚然对齐看起来更清楚,但是代码长了也看不到对齐了。一念之差,这个python作者能把自己理念贯彻下来也不容易。我个人不太认同这个思想,对齐可以让程序员自己实现,而不是强制。随着使用python更加熟练,我喜欢上python了,主要是写代码太简洁了,几百行就搞定一个程序。在我没有弄懂切片-1的用法之前我是很痛恨的,现在我也喜欢了,因为我懂了,-1 就是从后面开始,多简洁啊。否则要写成len(list)-1,很不简洁。

扫描二维码关注公众号,回复: 5263188 查看本文章

我总是认为人的大脑也是一个深度学习系统,学习越多,能力越强,比如我看了十本人工智能的书,水平上一个档次,你要达到我的水平也要去读十本书。可是事情没有这么简单,我记得大学毕业设计用C语言写个程序,我之前没学过c语言,就学过pascal,同学去选修c语言我没去,毕业设计我就去买一本C语言教程,谭浩强写的吧,读了一遍我就开始写程序,除了语法大同小异,我觉得c语言和pascal语言最大的不同是c语言有指针,而指针就是指向地址,虽然没有细究,但是毕业设计就是输入输出,读写文件,打印汉字点阵,看了那本书我就可以写程序了,但是一起做同一个项目的同学不会写程序。我不理解,不就是写程序吗,为何不懂呢?我想这不是深度学习的问题了,因为大家都是从零开始,之前也没学过c语言,只是大脑的泛化能力不同,就是举一举一反三,触类旁通的能力不用,可能是因为同为深度学习的大脑,其内部卷积神经网络构造还不同,因为泛化能力大不同。对我来说,学习一门计算机语言一个月就够了,学习十门计算机语言不用一年,而熟练一门计算机语言用几个月就够了。现在我用python已经比较熟练了,我特喜欢用python编程。我的学习能力非常强,可能是得益于大脑深度学习的强大泛化能力。比如学习python我关心他的不同点,我只学习python不同其他语言的不同点,这样学习内容就很少,而不是从头开始学。

我现在还用svm写机器学习程序,不过相对tensorflow,是简单了不少,只是卷积神经网络可以自动学习特征,而svm要做特征工程,svm只有核函数linear,poly,rbf,sigmoid几个特征学习器,用来找到一个分割超平面进行分类。机器学习用的样本数据比较少就能分类,而深度学习用大量数据,这样难度也很大。虽然有人认为深度学习有数据就行,可是也不是那么简单的,好的神经网络设计也不是人人做得来。

基本上说我研究算法目前可以说是一个合格机器学习工程师,但是离大师还是有距离的,比如理论还是不够深入,对rnn还不熟悉,以及各种目标检测算法,增强学习等。因为我擅长的是读写代码,我学习技术大多是通过阅读代码来学习的,比如svm我是阅读scikit-learn带的svm代码来学习,而不是大量阅读svm理论书籍,可能读不进去也读不懂,代码反而更容易读懂。有人说不懂理论怎么理解代码?我是通过阅读代码来理解理论的,这就是逆向?这或许是说,人也可以倒着走路的。

总之我已经走上人工智能大道了,花了一年半才成功转行,其实你舍得用一年半的时间去转行吗?当然之前你可能没有想到何时走到,但是人工智能之路没有捷径,我用一年半,你可能用三年半,那你可能还在半路。但是没有可以选择,人工智能之路不可以选择,而是必须走下去,如果你的学习能力差一点,你可以参加学习班啊,不能一个人闭门造车,不懂装懂。我现在还看斯坦福吴恩达的机器学习教程,一周看一集,没学到很多东西,听英语倒是进步很大,现在可以跟上英文字幕了。

我要去享受人工智能学习成果了,你也来吧。人工智能盛宴,不可以错过。

猜你喜欢

转载自blog.csdn.net/sinox2010p1/article/details/80467475