一个高中生的paddlepaddle心路历程
![物理课s脑洞](https://picx.zhimg.com/20cf9f9b577033b73b3866ef4d89ebdf_l.jpg?source=172ae18b)
![](https://picx.zhimg.com/v2-4812630bc27d642f7cafcd6cdeca3d7a.jpg?source=88ceefae)
'''
此处是一个弱弱的高中生的诉苦大会,机器学习专业人员请轻喷
'''
'''
从我开始写这篇吐槽以来,我发现paddlepaddle官网几乎是几个星期就有新的改进,刚写下来的吐槽被官网分分钟打脸,已经吐槽的跟还没来得及吐槽的问题几乎都被解决掉了。有的时候为了截张当时的图还得挂梯子从国外访问才能找到老版本的官网内容。果然是不鸣则已,一鸣惊人呐(雾)。所以以下的文字就拿来当作黑历史吐槽跟假的入门心得好了orz。
祝Parallel Distributed Deep Learning,一个良心的易学易用的分布式深度学习平台,越来越好 _(:3ゝ∠)_
'''
我是一名不务正业的高三学生,在高一高二分别接受了物理与数学的无情鞭挞后开始在高三发展自己的计算姬爱好。因为在此前小学就读于小县城,初中毕业于私立,所以我直到高中才真正地接触到计算姬编程的概念。不过因为父亲是某大专计算机基础课的老师的缘故(并不知道是什么课程),我很荣幸地能够拥有少量的计算姬素养,也算是我起步的一个基础了。
今天这里要给大家分享的是我一不小心踩到paddlepaddle的坑中在历经千难万险知难而退又被强行拖回逆流而上最后心有所感借景抒情情景交融抒发自己怅然期望归隐田园的故事。所以这篇文章大概面向的读者为不会python但是想学paddlepaddle的狭窄人群。若是大佬不小心看到此文章,请一笑而过,就当是一个不自量力的高中生的胡言乱语吧QwQ
import makerspace as space
大约两个月以前,我们学校开了有史以来最晚的一次运动会——11月28日开幕,11月30日闭幕。会天小雨,气温10-,南方的冬天就是这样的湿冷。虽然温度尚且在5°C以上,但是在稀稀拉拉个不停的细雨中我们的热情早就给浇得所剩无几。尤其是一二三四班,今年抽签决定班级看台位置的时候集体中邪,都被分配到了雨棚所覆盖不到的看台边缘位置,于是本来人数就不多的一二三四班在雨水的冲刷下就只剩下看热闹的高二跟看新鲜的高一了。
而此时的我,正坐在创客空间的电脑前,翘着二郎腿,吃着薯片,靠着摄像机,在全校视野最佳处观赏着操场上同学们的激情比赛,一脸轻松惬意,毫不担心有人会来打扌觉wosdhdfj/dgsLk%kd
killproc Havingfun.py
import paddle.v2 as paddle
就在我专心于欣赏运动会热情似火的比赛过程时,makerspace的谢老师突然出现:“诶呀,你们很闲嘛,来来来,不如我们趁 这三天 来学一点东西。”“......”“我看最近机器学习比较热门啊,不如你们玩一玩机器学习,怎么样?”“......”“嗯,TensorFlow跟paddlepaddle,你们一人来选一个。”“......”
趁着尴尬的沉默尚未被打破,赶紧手动百度TensorFlow跟paddlepaddle,看到的简介是“TensorFlow中文社区-首页”“TensorFlow如何入门”“ TensorFlow 是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于...”嗯,一看就跟我之前跳的UE4坑是一副德行,都是挑战我外语水平跟理解能力上限的东西。。。再看看paddlepaddle:“ PaddlePaddle_易学易用的全开源深度学习平台 \n百度深度学习平台PaddlePaddle是...”一看到百度这一起码比中文社区要友好的多的字眼我果断选择了paddlepaddle, 毕竟国产中文论坛多, 对于我这个零基础萌新真是再友好不过了、、
“paddlepaddle看起来不错,就决定是你了。”不失中二地喊出了这句话,我得意地瞥了眼边上那位python大神,他貌似并不在意什么,随口应了句“那我就学TensorFlow吧。”殊不知人间之险恶非我等萌新所能预料,天真的我即将跳进一个大坑。
---------------------分割线-----------------------------
正文:小白如何正确打开paddlepaddle
作为一个真·零基础的学徒,我所做的第一件事情就是搜索关键词“快速入门paddlepaddle”“零基础入门paddlepaddle”为什么不在官方网站上学习呢?嗯,因为身为小白我还是有一点自知之明的,官方文档那什么的就算是中文我也不一定看得懂,要想在毫无背景知识的情况下看懂官方文档什么的......之后不久,我便在CSDN上发现了不少入门教程。在浏览了部分的教程之后,我很轻松就入门了paddlepaddle......
当然没有!
让我们来欣赏一下这些教程:
打开这些链接:
一脸懵〇。。。作为国内被非常看好的神经网络框架,居然出现官网都404的现象??
等等,一定是哪里搞错了。。。
于是我点开了paddlepaddle的官网:
看起来貌似没什么问题。。。网站做的虽然看起来冷清了一些,不过作为官网也算是比较好看了,不存在关闭的情况。(看样子是百度paddlepaddle原来官方文档的网址后来发生了变动,因此才导致了原来的网址404. #不懂瞎猜)
( 忽略掉了快速入门四个大字以后 ,)我对官网进行了初步探索。在左上角能够发现“模型库”三个字。即使小白到如我一般地步,也知道模型库可是个好东西。有了提供好的模型我就可以搬运抱走强行改装,最后交差什么的都不是难事,嗯,咱一点也不熟练。
不过在此之前,还是要先安装我们的paddlepaddle的。点开CSDN的教程,我看到的大部分字眼是这样的:
还有这样的:
甚至于官方文档(2017年12月初)也有这样的说明:
所以,得出结论,paddlepaddle目前唯一官方支持的运行方式是docker容器..器啊你个大头鬼!虽然不知道当时写教程的人用pip install paddlepaddle 出了什么问题,但对于我 11月29日 的那次尝试来看,pip install paddlepaddle 并没有出现任何问题。由于官方网站“快速入门”里本身就提供了使用pip 安装paddlepaddle的示例,因此我的第一次尝试也是使用pip,并且非常没有问题地成功运行了第一个demo。
然而我是一个小白,没错,是一个小白,白。
所以在一个多月前我还不知道什么是pip。我知道的只有教程上所说的“ docker是个好东西,方便快捷易入门 ”。于是,不明觉厉的我随即按照各教程上所说的在ubuntu系统下安装了docker,然后跟着教程配置了一大堆什么看不懂的东西。最后跳回到官方文档运行了housing.py,“ 瞧 ! 它应该打印出预测住房数据的清单。”圆满完成!我终于入门啦!
但是很快我就发现了一个问题:docker的命令,我并不会。。。在之后的一些尝试中我发现,docker给我报了很多莫名其妙的错误, 由于年代久远已经记不得是怎么回事了 ,现在想来,大约是我使用的命令总是套用paddlepaddle教程上上给出的( 现在官网已经有关于docker的教程贴出了,建议一看 ):
docker run --rm -v ~/workspace:/workspace paddlepaddle/paddle:latest python /workspace/housing.py
在没有弄懂命令里的各参数含义的情况下,如此生搬硬套当然是会出很多错误的。而且在根据网上教程进行对docker的配置时我也是一头雾水,并不知道自己在干什么 QwQ所以随后出现错误也是意料之中的。
于是乎,正当被困在这一起步的我准备自暴自弃时,老谢拿着一篇微信里的paddlepaddle教程走到我身边。映入眼帘的是这么一段话:
惊了,原来这么几天我都是在纠结毫无用处的东西吗?
赶紧回头尝试了一下pip install paddlepaddle,果然没什么问题,这才回想起当初根据官方网站上的快速入门早就已经使用过这种方式安装了paddlepaddle了,自己居然丝毫没有意识到。。。#瞬间有种想枪毙自己的冲动
在不久以后的一天我打开paddlepaddle官网的时候发现,这句“paddlepaddle目前唯一官方支持的运行方式是docker容器”莫名已经不见了,大约是paddlepaddle官方自己也发现了这个奇怪的表达所带来的麻烦。不过话说回来,paddlepaddle的中文教程虽然读起来并不算生涩,但是字里行间总感觉带着一股翻译腔。所以我严重怀疑paddlepaddle最早是只有英文文档的,中文文档是在英文的基础上加以改进而成的。证据如下:
把only的意思替换成最好的最适当的,之前的表述明显就符合事实多了。然而在中文中,“唯一”的意思大约的确是只有唯一的意思吧?
#顺便提一句,之前在隔壁win10的电脑上试图安装docker来运行paddlepaddle,结果
#docker居然跟网易木木模拟器产生了冲突,导致电脑总是自动关机,。请问有哪位大神能跟#我这个小白解释一下到底是怎么回事咩:3?
'''
上文并不是在说docker容器不好用,只是对于我这个什么也不懂的个体来说,使用docker来入门paddlepaddle实在是太不友好了。。。不仅没有多少简化paddlepaddle的运行,而且还需要另学一个docker的使用方法。。。所以吐槽一下,以明死生之大,小白之弱无药之可救也。( 2018年2月22日补:paddlepaddle官网已经贴出了docker的详细介绍,使用教程等,大家可以去看看哦 )
'''
---------------------------分割线----------------------------
在经历了这一痛苦的入门(xià zài)过程以后,我终于算是对paddlepaddle有了一个初步的认识。为了有一个更清爽的开始,我果断选择了换台电脑(嗯)。在另一台我常用的win7上,我面临着三个选择:docker,虚拟机,双系统。
当然是虚拟机啦。第一,我只是初步学习paddlepaddle,应该(?)不需要太高的配置;第二,虚拟机相比双系统更容易切换,适合在陷入瓶颈的时候#切到win7放松一下#。第三,我对docker有心理阴影。至于刷掉win7系统,想都不要想。。。
安装了visualbox,下载了Ukylin系统镜像,立刻开始了paddlepaddle的新的安装
sudo apt-get install python3-pip
pip install paddlepaddle
安装完成,木有问题。、
这次的paddlepaddle学习要稳一点了,想要真正学会使用paddlepaddle,必须要认真学习教程,从基础开始学习。在百度到的一系列的教程中,我唯一能看懂的就是“ PaddlePaddle系列之三行代码从入门到精通 ” 对于我这种完全的初学者来说,我觉得最重要的并不是那一大堆收敛公式啦,卷积层模型啦。因为我所能搜到的(paddlepaddle)教程里面,大多只讲述了某网络构造的原理,优点,结构,但对代码什么的却只字不提,弄得我十分尴尬。又或者清一色都是码出来的代码,但是并不知道到底有什么用......
偷瞄了一眼边上的python大神,正在认真地看着tensorflow的详细教程。一个视频里是生动易懂的原理讲述,另一个页面里是对应的代码模块,对比一下,顿时感觉自己好寒酸。不过想来也是,paddlepaddle开源才没多久,比起tensorflow来算是比较年轻(虽然就差了一年),而且在使用者数量上也有差距。多数使用paddlepaddle的人都是用过tensorflow等深度学习框架的大佬,因此写出来的教程就十分简洁(过于简洁了吧喂),对我这样的小白就相当之不友好了。
'''
所以希望百度paddlepaddle能够推出更加适合新手入门的教程。 这在我学习的过程中体会十分深刻,搜索paddlepaddle,出现的还都是两年前开源的消息,直到差不多12月中旬了我才发现有“生鲜桃子分拣机”之类的新闻出现在官网上。而关于教程,视频类教程只有百度学院的教程,丰富程度跟别的框架根本不能比,差点让我产生了“这个框架是不是烂了”的想法。而且并搜不到paddlepaddle论坛,只有在GitHub里面有讨论区。(不过在GitHub里面提问倒是挺方便的嗯)感觉paddlepaddle作为一款优秀的深度学习框架不怎么受人重视。如果paddlepaddle能够降低入门门槛,引导类似我这样有兴趣(wú liáo)的高中生前来入坑的话,那么将来国内的初学者肯定会首先选择paddlepaddle。而随着我国信息技术在国际上的地位越来越高,国人认可的深度学习框架也一定会成为世界认可的深度学习框架。这岂不妙哉?
'''
'''
2018年2月20日:2月8号的时候 @木小兆 学姐给我发了条私信,告诉我百度paddlepaddle的官网 更新了大批的教程 。赶紧打开官网一看,果然,相比几个月前我刚刚接触paddlepaddle的时候多出了不少的教程。更关键的是,虽然许多教程过去已经有了,但是在过去百度并没有将它们分类,只有在百度视频里搜索paddlepaddle的时候会看到百度学堂里有零零散散的这么些教程。现在的paddle官网不仅将它们分门归类,还标注了教程的难度梯度。从python基础开始,到paddle入门乃至具体实践案例,都有了较为完善的教程视频。说明我们百度的大大们还是非常认真敬业的,感觉这四个月paddle官网的改变比前两年的还要多(猜测,并不知道两年以前官网长肾么样纸。)而且这么大的改动居然是在年底诶, 百度的大大们真的是非常辛苦敬业呢!(真心话)
'''
扯远了。
回到学习上来。教程看不懂怎么破?还有什么比较好的入门方法捏?
我想起了当年入坑UE4的时候,也遇到了看不懂教程尴尬局面#只不过当时是对着英语看不懂,如今是对着中文看不懂# 而这一次我用了和上次同样的解决方法——拆模板。
模板是个好东西,不仅可以拿来试用,还可以拿来拆。拆解一个实例,逐行逐句地去分析猜测代码的作用与含义,然后再回头来理解其原理规则。这种方法的确很难用,尤其是我还并不会python。不过幸而边上有python大神 @robot赑nin 可以帮忙,为我扫清了不少的障碍。不过既然像我这样彻底的小白这么少,这种方法也不一定值得借鉴了。
但是我都摸索了这么久,还是讲一下好了(滑稽)
如何正确地不看教程来学习paddlepaddle(此章节已过时)
右击创建新建文件夹,重命名为“workspace”,然后优雅地按照官方文档下的“房价预测”(现已挪至官网“进阶实战”下的技术文档)创建了一个housing.py,复制粘贴代码内容就可以了。接着右键在终端中打开(之前并不知道可以这么做,所以每一次打开终端都要输入一大堆路径orz),直接运行命令:
python housing.py
然后看到终端界面闪出一大串看不懂的乱七八糟的字符,然后一排排整齐的数字飞过,然后运行完毕了。
官方的介绍是说“瞧,他应该打印出预测住房数据的清单”虽然看得我一头雾水但是勉强接受了吧。唯一一个比较诡异的地方在于那句”请确保fit_a_line.tar是在正确的路径上”(现在教程已经删去),联系上下文并没有发现什么fit _ a_line.tar。不过在上一次的docker安装的时候下载的房价模型倒是的确叫这个名字。不知道是不是弄错了。
然后我们来拆解代码了。
import paddle.v2 as paddle
# Initialize PaddlePaddle.
paddle.init(use_gpu=False, trainer_count=1)
#可以看到一个use_gpu赋值为false,说明不适用gpu计算,同时也说明这里的代码不要乱动为好
# Configure the neural network.
x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(13))
y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear())
#看到了定义变量x与y_predict,凭借我三脚猫的英语水平看出这里的y是用来预测的
#其它的也不用管了,后面那一堆到现在都还没看懂,参数什么的~
with open('fit_a_line.tar', 'r') as f:
parameters = paddle.parameters.Parameters.from_tar(f)
#这串代码厉害了,可以看到关键词with open虽然在之前并没有学python,也不懂with open
#的具体含义,但是结合fit_a_line.tar是一个文件的状况,可以感受到这里是打开某个文件的代码
#不管是数据库还是训练好的模型,这里都至关重要
# Infer using provided test data.这句英文注释就已经能说明一切了,显然这个test data是训练用的数据,
#那么上文的with open 打开的应当就是训练过的现成的模型了
probs = paddle.infer(