深度学习框架keras——学习调研汇总

一、常用的学习资料链接:

kares官网中文链接:http://keras-cn.readthedocs.io/en/latest/

优点:

(1)易使用:对于不求甚解,只是当做一个黑盒子使用的人,keras容易上手;

(2)扩展性:keras的设计将大量的内部运算都隐藏起来,但是其扩展性并不差;

(3)文档齐全,python编写,更新迅速,论坛活跃。

四种常用框架难度排序:

Keras--->pytorch--->tf--->theano

特点:

1.keras:非常优雅、最易学好懂,可以快速上手实现矩阵的网络结构。

2.pytorch:定制性好,可DIY指数高。

3.tf:优雅,好理解。

4.theano:定制性好,但是需要充分创造轮子,要自己实现一些功能。

学习方式建议:至少一次,手动从零开始写一个神经网络的代码后,在使用keras.否则容易依赖keras的易使用性而忽略底层原理。并且很多扩展只在懂得底层原理后才得以实现。

以下是来自知乎大神杨超的经验(https://www.zhihu.com/question/35396126/answer/73198822),摘取部分:

最近刚开始使用theano, 经验不多,连个基本的模型都跑不通,于是去看了下Keras,源码比较简洁,可以当作theano的示例教程来看,感受如下:1.文档看似很全,每个layer是干啥的,每个参数是啥都写了,但是不去读代码,实际很多人是无法从文档理解其具体用法的。这点看issue里的讨论里可以看出。同样,example似乎很多,而且都能直接run,还都是real world的数据集,看似很好,但是实际上,对于新手,如果需要的模型跟example里的不完全一样,不容易搞懂到底需要把输入输出的数据搞成啥格式。举个例子,example都是做的classification的,没有做sequence labeling的例子,如果想拿来做个pos tagging,不知道数据如何组织。当然,这些其实花一天读下代码或者好好翻翻issue讨论就可以解决了,但我相信不少人不会去认真读代码或者看讨论,而是直接换个工具。我感觉目前的doc只有懂了代码的人才能看懂,不懂得看文档还是没啥用。2.项目很简单所以开发者不多,但是很活跃,每天都有新东西加进去。今天增加了一个新的分支后端可以用theano或者tensorflow了,不过貌似由于不支持scan,backend用tensorflow的没实现recurrent layer。他们也意识到文档的问题,觉得需要为小白用户多加点tutorial而不是光给develop看。我没用过其他的framework,仅说keras拿来学习theano基本用法,很不错库本身的代码,比较简单易读,我作为python菜鸟,也能看懂。目前model有sequential和grapgh两种,前者并不是指recurrent而是说网络是一层层堆的(也包括recurrent).其他的主要概念包括layer,regularizer, optimizer,objective都分离开。layer用于build每层的输出函数,model会用最后一层的输出,根据objective和每个layer的regularizer来确定最终的cost,然后在update时用optimizer来更新参数。把这四个看下加上model里的fit函数,就会用theano啦。很多模型都能cover,seq2seq这种也有现成的可用。建议不要光看example,多看看github上的 issues讨论,实在找不到,直接提问。效率方面,我不懂theano怎么优化,感觉keras的这种封装,没什么成本,跟自己用原生theano是一样的。当然,theano本身就好慢啊。

另外一位知乎大神Sherlock(https://www.zhihu.com/question/35396126/answer/173032914),感觉说的有道理,先摘抄一下,后续根据经验另行更改:

首先必须要说的就是,不管你要做什么,只要是deep leanring有关的,那么tensorflow是你不可能绕过的,就不说现在很多人论文用tensorflow,工业界用tensorflow的也很多,而且Google推出了tpc,毫无疑问有了tpu,tensorflow速度肯定会更快,可以很明显的感觉到Google在强推tensorflow,而tensorflow目前也算是默认的老大地位。有了这一点,我们就可以来谈谈keras了,因为keras的后端有tensorflow,也就是说要使用tensorflow可以用keras来简单的代替。我之前一直觉得keras封装的太高级,不够灵活,而tensorflow又显得很笨重,所以对keras和tensorflow一直有点抵触,不想有tensorflow或者keras来实现模型。后面出了pytorch,我就去玩pytorch去了,感觉pytorch特别轻,而且很灵活,突然我发现pytorch有好多地方和keras其实挺像的,于是有回到keras看了看,发现其实可以把keras和tensorflow结合起来用,这样既轻便,同时也有很强的灵活性,相当于把一些重复性的繁琐的操作用keras封装起来,而一些自己需要设计的东西呢还是可以用tensorflow自己设计,可以看看这个链接将Keras作为tensorflow的精简接口 - Keras中文文档。pytorch由于动态图的关系确实很灵活,但是performance应该不算很好,没有tensorboard可视化,虽然github有人自己想办法弄出来了,同时也分享了,但是还是略显麻烦,而且分布式支持应该也不太好,毕竟定位于科研,而caffe2应该是fb强推的工业化框架。所以keras+tensorflow应该算是比较好的一种解决办法。对于初学者可以用keras搭搭积木,熟悉之后可以和tensorflow配合起来实现很多复杂功能。所以keras提供了从初学者到高级使用者都可以满足的功能,所以keras其实还是挺好的。另外对于速度方面我没有比较过,不知道keras到底慢在什么方面,如果用keras+tensorflow,我觉得速度应该和tensorflow相当,毕竟只是使用了几个简单的layer封装,而训练过程还是暴露在tensorflow下。

keras学习案例:

糖尿病识别https://www.kesci.com/home/project/5a5b691046c4ba639c6fbfa2

猜你喜欢

转载自blog.csdn.net/pearl8899/article/details/81285552