一些关于gluon的建议

一直都在用mxnet,最近也掌握了gluon的用法,定义模型方便了很多,但还是发现有一些需要改进之处。

  1. 传说动态图是pytorch的优势,发明gluon也是为了方便动态图的开发。但是由于工作需要,偶尔接触了tensorflow的一些大型工程,才发现tensorflow才是真正的牛逼——静中有动。这点很好,可训练参数不变但图(symbol)变了,tensorflow会自动处理,不需要symbol那样重新bind或者显式地采用bucket module,没有额外的bind开销,而且静态图的内存和运算速度稳定性也远好于纯动态的ndarray。
  2. 根据输入通道数,确定卷积核数,这个其实gluon是自动处理的,但是如果要求卷积核数和输入通道数呈比例关系而不是相等时,这就很难通过gluon实现了,必须要用户显式地处理inchannels。如SeparableConv.
  3. HybridBlock在hybrid_forward里面需要获取tensor的shape也不方便,F是nd时容易获取,但在F是symbol时就比较麻烦了,虽然可以呼叫infer_shape_partial推断shape,但是必须变symbol且提供输入数据的shape,这样就不能再用纯gluon的接口进行训练了,只能用module.
2赞

赞,您说的第三点正是我现在很头痛的地方,考虑要不要学习下TF。。

传统nd接口直接.shape就可以了,symbol接口要给定输入的shape才能推断出shape。但是gluon如果是hybridize之后就无法推断shape了,我觉得官方可以在Block里面加一个getshape接口,这样就比较完美了

1赞

同样对第三点很头疼,很奇怪symbol有reshape这样的操作,却不能增加一个getshape接口,这么看起来还是tf比较稳定。

gluon用了hybrid_forward以后就不太灵活了,第三点问题确实影响很大。

目前的做法是调试的时候,把hybrid_foward直接改成forward(x), 不知道现在有没有更好地解决方法?