Keras核心笔记——类结构

综述

在以mxnet/gluon这个超简洁又强大的命令式框架入门的本人眼里,keras2的类层次结构非常繁杂
例如 它里面似乎把Model和一般的Layer分开对待
但是如果一个layer是一个函数fx,那么将一群函数以何种方式堆叠起来,比如复合,或者叠加,得到的仍然是一个函数,按这个来看,layer的容器就应该是layer本身,这样比较符合逻辑

对比

mxnet/gluon

mxnet/gluon中,完美地贯彻了这个逻辑,序贯模型,其本质上仍然可以被当作一个function对待,或者当作一个layer对待,其除了可以用add函数添加子layer外,并没有什么特殊的地方,可以把它看作一个方便使用的小福利
并且,查看源代码可以发现,其直接继承于Block类,这个类是“神经网络函数”的基类,任何一个layer也继承于此类,整体来说其继承结构比较平坦

keras

而keras2中,序贯模型继承自Model,而Model继承自Container
Container才继承于Layer类,这个Layer类才是所有层的最终基类

综合

查看源码可以发现 keras的代码要复杂的多,而且也难读的多,例如从序贯模型类开始跟踪,进入一个名字叫models.py的文件
这个文件有1500多行,而mxnet/gluon,跟踪进入basic_layers.py文件,整个文件只有不到500行
同时gluon的源代码组织非常清晰,几乎没有重复代码
没有堆砌的代码,不看注释基本都能迅速读懂意思,而keras则是有大量参数,在网络的构造,编译,训练,预测阶段有一套完整的生命周期,在每一个layer的类中往往是存在大量的对外接口,而gluon写一个layer甚至只需要写一个函数完成一次原始的NDArray运算就好

总结

mxnet/gluon是个动态图框架,其依靠mxnet得到了卓越的性能,从pytorch中吸取经验,又有了一套对用户极其友好的接口,非常适合科研使用,其开发速度快,灵活,代码直观容易修改,并且其使用时不感觉向堆积木,而是真正像在做数学工作,这点非常难得

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Keras 源码分析 此文档中,凡代码里用pass,均系省略源码以便阅读,起“本枝百世”之用。此注明者,乃pass...
    yangminz阅读 31,872评论 5 34
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,552评论 25 708
  • 寒风摧秋叶,落叶也无悔。 待到明年春,又是起轮回。
    甬雁南飞阅读 257评论 0 0
  • 火车的鸣声响了 是不是到站了 你只身一人 去了异国他乡 我在后面追着跑着大喊着 你却还是丢下我了 杂乱的铁轨上 只...
    小芴阅读 197评论 0 0
  • 心随我动
    古川雄辉阅读 159评论 0 0