Python 在运行时获取HybridBlock层形状

Python 在运行时获取HybridBlock层形状,python,python-3.x,mxnet,Python,Python 3.x,Mxnet,我正在尝试构建一个自定义池层(用于ndarray和Symbol),并且我需要在运行时知道输入形状。根据文档,HybridBlock具有“推断形状”功能,但我无法使其工作。有人指出我做错了什么吗 mxnet版本 1.0.0,从康达、蟒蛇3构建 最小重现性示例 例如: 将mxnet导入为mx 将mxnet.ndarray作为nd导入 从mxnet.glion导入HybridBlock 类运行时形状(HybridBlock): 定义初始值(self,**kwards): HybridBlock.\uu

我正在尝试构建一个自定义池层(用于ndarray和Symbol),并且我需要在运行时知道输入形状。根据文档,HybridBlock具有“推断形状”功能,但我无法使其工作。有人指出我做错了什么吗

mxnet版本 1.0.0,从康达、蟒蛇3构建

最小重现性示例 例如:

将mxnet导入为mx
将mxnet.ndarray作为nd导入
从mxnet.glion导入HybridBlock
类运行时形状(HybridBlock):
定义初始值(self,**kwards):
HybridBlock.\uuuuu init\uuuuuuuu(自,**kwards)
def混合动力前进(自、F、F输入):
打印(自推断形状(_输入))
返回输入
xx=nd.随机均匀(形状=[5,5,16,16])
mynet=runtime_shape()
mynet.hybrid_forward(nd,xx)
错误消息:
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
---->1年期混合动力车远期(nd,xx)
混合动力前进(自、F、输入)
17 def混合动力前进档(自、F、U输入):
18
--->19打印(自推断形状(_输入))
20
21返回\u输入
/home/dia021/anaconda2/lib/python2.7/site-packages/mxnet/glion/block.pyc为推断形状(self,*args)
460 def推断形状(自,*args):
461“从输入推断参数的形状”
-->462自我推断属性(“推断形状”、“形状”和*args)
463
464 def推断类型(自身,*参数):
/home/dia021/anaconda2/lib/python2.7/site-packages/mxnet/glion/block.pyc in_infer_attrs(self、infer_fn、attr、*args)
448定义推断属性(self、推断fn、属性、*args):
449“通用推断属性”
-->450个输入,输出=自。\获取\图形(*args)
451 args,=_展平(args)
452参数属性,辅助属性=getattr(输出,推断)(
/home/dia021/anaconda2/lib/python2.7/site-packages/mxnet/glion/block.pyc in_get_图(self,*args)
369 params={i:j.var()表示自我中的i,j。_reg_params.items()}
370带有self.name\u scope():
-->371 out=self.hybrid_forward(符号,*分组_输入,**参数)#pylint:disable=参数无值
372输出,自我。输出格式=\u展平(输出)
373
/home/dia021/anaconda2/lib/python2.7/site-packages/mxnet/glion/block.pyc in_____退出__(self、ptype、value、trace)
78如果自块为空前缀:
79返回
--->80 self.\u name.\u scope.\uuuuuu exit.\uuuuu(类型、值、跟踪)
81 self.\u name\u scope=None
82 _块范围。_当前=自身。_旧范围
AttributeError:“非类型”对象没有属性“\uu退出”

HybridBlock的思想是让它在命令式世界中易于调试,在命令式世界中,您只需放置一个断点或一个
打印
语句,就可以查看哪些数据正在通过您的网络。当您确信网络正在做您想要的事情时,可以调用
.hybridize()
,享受速度的提升

在开发网络和使用命令式模式时,您只需打印:

打印('shape',_input.shape)

使用网络的混合版本时,请删除此行,因为这只适用于Ndarray


如果这还不能回答您的问题,您能否通过获取输入数据的形状来确定您试图实现的目标是什么?

Hi@Thomas,我刚刚看到了这一点。我想实现金字塔场景解析池操作符并将其混合。从原始的
\u输入
中,我需要生成1x1(全局)、2x2、4x4、8x8功能(过滤器)。另请参阅我在mxnet github上的问题。谢谢