gluon架构
第一部分是定义模型,用户写模型代码或者逻辑的地方,第二部分是gluon定义的一些算子接口,比如卷积,bn那些,当前还是比较缺乏,第三部分是block, 这里是用户写模型要交互的类,gluon定义了forward等一些重要函数,变量都定义在这,比如forward接口函数,梯度,weight等等第四部分运行时,gluon定义了自动求导等等,在这里gluon和原生mxnet有一个对比的部分,最后两者调用一样的mxnet后端
执行流图
- 用HybridBlock写模型,默认用ndarray命令式执行前向计算,更新梯度
- 执行hybridize后,第一次执行hybrid_forward会存储计算图,以后再调用直接调用计算图
类图关系
python层面的代码,contrib应该会放一些贡献者的包装好的算子代码什么的;data用于加载数据;model_zoo里面定义了很多模型,目前主要是分类模; nn定义了常见的一些神经网络层,conv, bn, active等;rnn里面定义循环卷积的算子;block定义了block, hybridblock等逻辑,这个是gluon最重要的接口;loss里面定义各种各样的loss函数;parameter定义的参数权重的类,包装了一个字典;trainer,主要用于更新梯度。
主要的类图关系如下图: