首先,本文档会尽量多地覆盖一些细节。也就是说尽量把你当做啥都不懂的,宁可错杀一千,绝不放过一个你不知道的知识点,敬请谅解。(此风格为Tips)
- 正文开始,现在越来越多的论文会在GitHub上公开源代码。本文档是如何将GitHub上的代码运行起来的技巧。
这里多说一些关于GitHub的技巧吧,GitHub是一个面向开源及私有软件项目的托管平台。类似的有码云(马爸爸真的没有生气吗??),原来叫oschina。
- 拿到一个GitHub项目,首先要看README.md文档,如下图左下角部分。一般一个项目,或者框架(比如TensorFlow),一定要去看官方文档。哪怕别人的blog写得再好,也没有官方文档靠谱。(这已经是血的教训了!!!)
- README.md这种文档不会讲算法细节,它会告诉你假设你在一个裸机上,只有基本的Requirement,启动流程是怎样的。按顺序执行!!!按顺序执行!!!按顺序执行!!!(重要的事情说三遍)
- 所有的语言,要运行一个项目,都要先装依赖的包(C语言要装 gcc,Java有maven管理jar包依赖,Python有pip和anaconda)。例如图中,就有
pip install numpy Theano keras kerosene
- 其实所有命令都应该要有执行目录的说明,当然很明显,Theano是通用包,所以上面那条命令,在任意目录打开命令行执行都行。但是后面那条
pip install .
命令就必须在项目clone下来后,在项目的路径下执行了,.
在Linux下是当前路径的含义(关于Linux最近有心理阴影,所以写得细一些)
这个文档里没写 Python 的版本号,其实项目里有 __ init __.py 的,都是 Python 2.7,同时这个文件的含义是:“Python 解释器会把这个文件所在的文件夹当成一个python package,可以在其他的源码文件中 import 进来”。还有就是 pip,如果是Python 3.x,一般是 pip3;虽然见过帝都著名双强中靠西边的那所高校有人将 python 软链到 python3.x,但是那都是傻X。
- 在实践过程中(我是个反面教材),我以为装好依赖就没事了。我执行了
pip install numpy Theano keras kerosene
和pip install .
,我以为项目就可以跑了。然后我也没认真看 README,找了一个命令就直接执行了。
- 我找的是图中的上面那条,你可以在README里面看一下。当然,完整的命令是
python 路径/train.py shallow_model --in-memory --model=shallow_convnet --local-data data/musicnet_11khz.npz
。然后它会报错(嗯,特地当反面教材的目的是教你如何看报错)。
-
对于 Python ,一般原因会写在最后面,且是用标准英文写的。例如图中是
IOError: [Errno 2] No such file or directory: '/Volumes/MyDisk/musicnet_11khz.npz'
,报错类型是 IOError,原因是没有这个文件或者目录,说明是要下载数据,然后回去看 README 。发现它还要去 https://homes.cs.washington.edu/~thickstn/media/musicnet.npz 这个链接下载数据。 -
那么其他几行报错是啥意思呢?首先它是一种调用层次的说明,很简单,我就不去细说了,留作探索。
-
然后我就去下载数据了,当然还重新采样了一下。(数据11GB,重新采样需要执行一小时)
-
然后重新执行
python 路径/train.py shallow_model --in-memory --model=shallow_convnet --local-data data/musicnet_11khz.npz
,还是会报错,会报 mimir 没有 Logger 这个属性,一开始我不知道为什么,网上找了一下,mimir也不是像TensorFlow那样的公用包,那作者应该会说明吧。然后才发现是需要执行pip install git+git://github.com/bartvm/mimir.git
。所以尽量按顺序执行,虽然不按顺序执行可能踩比较多的坑,理解会透彻一些。之后还报了一个 IOError ,是 Logger 的那个路径在代码里写死了,需要新建目录。IOError一般是和路径相关的错误。
结束语
- 路漫漫其修远兮,加油加油!!