Does anybody have experience with how to get the shape of a Symbol using infer_shape?

hi @samhodge sorry i have been busy and havent gotten a chance to look at your changes. Have you looked at infer_shape documentation ?

i think you should be able to use infer_shape without any arguments

the shape should be inferred when data is bound to the symbolic inputs to the model

its not very clear from the documentation. maybe we should add an example to the documentation.

/home/samh/dev/MXNet-Gluon-Style-Transfer/net.py:332: UserWarning: Cannot decide shape for the following arguments (0s in shape means unknown dimensions). Consider providing them as input:

data: ()

in_shapes,out_shapes,arg_shapes= X.infer_shape()

data: ()

in_shapes,out_shapes,arg_shapes= X.infer_shape()

that is not a good start

With this

`class Inspiration(HybridBlock):

""" Inspiration Layer (from MSG-Net paper)

tuning the featuremap with target Gram Matrix

ref https://arxiv.org/abs/1703.06953

"""

def**init**(self, C, B=1, ctx=mx.cpu(0)):

super(Inspiration, self).**init**()

""" Inspiration Layer (from MSG-Net paper)

tuning the featuremap with target Gram Matrix

ref https://arxiv.org/abs/1703.06953

"""

def

super(Inspiration, self).

```
# B is equal to 1 or input mini_batch
self.C = C
self.B = B
self.weight = self.collect_params().get('weight', shape=(1,self.C,self.C),
init=mx.initializer.Uniform(),
allow_deferred_init=True)
self.gram = self.collect_params().get('gram', shape=(self.B,self.C,self.C),
init=mx.initializer.Uniform(),
allow_deferred_init=True,
lr_mult=0)
self.weight.initialize(ctx=ctx)
self.gram.initialize(ctx=ctx)
def setTarget(self, target):
self.gram.set_data(target)
def hybrid_forward(self, F, X, gram, weight):
P = F.batch_dot(F.broadcast_to(weight, shape=(self.gram.shape)), gram)
if not isinstance(X,symbol.Symbol):
return F.batch_dot(F.SwapAxis(P,1,2).broadcast_to((X.shape[0], self.C, self.C)), X.reshape((0,0,X.shape[2]*X.shape[3]))).reshape(X.shape)
else:
#print "Hooppla", interals
#for i in dir(interals):
# print "kk:", i
in_shapes,out_shapes,arg_shapes= X.infer_shape(self.gram.shape)
#print out_shapes
#raise Exception
#arg_shapes, out_shapes, aux_shapes = interals.infer_shape(self.gram.shape)
#print "A", arg_shapes, "O", out_shapes, "AU", aux_shapes
return F.batch_dot(F.SwapAxis(P,1,2).broadcast_to((in_shapes[0], self.C, self.C)), X.reshape((0,0,in_shapes[2]*in_shapes[3]))).reshape(in_shapes)
def __repr__(self):
return self.__class__.__name__ + '(' \
+ 'N x ' + str(self.C) + ')'`
```

i get the following error

terminate called after throwing an instance of 'std::logic_error'

what(): basic_string::_S_construct null not valid

Abort

what(): basic_string::_S_construct null not valid

Abort