我使用卷积而不是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代码?
答案 0 :(得分:0)
您在hybrid_forward()中的代码不是“可混合的”,即它不能转换为符号图。 Symbol没有shape属性,但是稍后您将构造卷积过滤器。我不确定要实现的目标,但是如果您知道先验的形状,则可以在 init 中初始化过滤器,并在hybrid_forward()
中使用