将mxnet转换为符号模型时出错

时间:2020-10-14 02:07:12

标签: python deep-learning mxnet

我使用卷积而不是net中的shuffle操作

class ShuffleChannel(HybridBlock):

    def __init__(self, groups):
        super(ShuffleChannel, self).__init__()
        self.groups = groups

    def hybrid_forward(self, F, x):
        # shuffleOp
        # x.reshape((0, -4, self.groups, -1, -2)).swapaxes(1, 2).reshape((0, -3, -2))
        # return x
       
        # MineOp
        N, C, H, W = x.shape
        channels_per_group = C // self.groups
        conv_kernel = nd.zeros((C, C, 1, 1))
        for k in range(C):
            index = (k % self.groups) * channels_per_group + k // self.groups
            conv_kernel[k, index, 0, 0] = 1

        return nd.Convolution(x, conv_kernel, no_bias=True, kernel=(1,1), num_filter=C)

在训练过程中,它运行良好,我想将模型转换为符号格式。但是出现错误:

......
  File "E:\AntiSpoofing\shuffleNetv2-mxnet\shufflenetv2.py", line 27, in hybrid_forward
    N, C, H, W = x.shape
AttributeError: 'Symbol' object has no attribute 'shape'

我可以指定输入'x'为ndarray格式还是更改func代码?

1 个答案:

答案 0 :(得分:0)

您在hybrid_forward()中的代码不是“可混合的”,即它不能转换为符号图。 Symbol没有shape属性,但是稍后您将构造卷积过滤器。我不确定要实现的目标,但是如果您知道先验的形状,则可以在 init 中初始化过滤器,并在hybrid_forward()

中使用