RoacherM commented on issue #11177: mxnet.base.MXNetError URL: https://github.com/apache/incubator-mxnet/issues/11177#issuecomment-395248719 hello,@marcoabreu .My network design is here: class ConcatNet(nn.HybridBlock): def __init__(self,net1,net2,**kwargs): super(ConcatNet,self).__init__(**kwargs) self.net1 = nn.HybridSequential() self.net1.add(net1) self.net1.add(nn.GlobalAvgPool2D()) self.net2 = nn.HybridSequential() self.net2.add(net2) self.net2.add(nn.GlobalAvgPool2D()) def hybrid_forward(self,F,x1,x2): return F.concat(*[self.net1(x1),self.net2(x2)]) class OneNet(nn.HybridBlock): def __init__(self,features,output,**kwargs): super(OneNet,self).__init__(**kwargs) self.features = features self.output = output def hybrid_forward(self,F,x1,x2): return self.output(self.features(x1,x2)) class Net(): def __init__(self,ctx,nameparams=None): #(255,299,299) inception = vision.inception_v3(pretrained=True,ctx=ctx).features #(255,224,224) resnet = vision.densnet121(pretrained=True,ctx=ctx).features self.features = ConcatNet(resnet,inception) self.output = self.__get_output(ctx,nameparams) self.net = OneNet(self.features,self.output) def __get_output(self,ctx,ParamsName=None): net = nn.HybridSequential("output") with net.name_scope(): #可以添加batchnorm等层 net.add(nn.Dense(256,activation='relu')) net.add(nn.Dropout(.5)) #分类 net.add(nn.Dense(2)) if ParamsName is not None: net.collect_params().load(ParamsName,ctx) else: net.initialize(init = init.Xavier(),ctx=ctx) return net class Pre(): def __init__(self,nameparams,idx,ctx=0): self.idx = idx if ctx == 0: self.ctx = mx.cpu() if ctx == 1: self.ctx = mx.gpu() self.net = Net(self.ctx,nameparams=nameparams).net self.Timg = transform_test def PreImg(self,img): imgs = self.Timg(img,None) out = nd.softmax(self.net(nd.reshape(imgs[0],(1,3,224,224)).as_in_context(self.ctx),nd.reshape(imgs[1],(1,3,299,299)).as_in_context(self.ctx))).asnumpy() return self.idx[np.where(out == out.max())[1][0]] def PreName(self,Name): img = image.imread(Name) return self.PreImg(img) def transform_train(data, label): im1 = image.imresize(data,224,224).astype('float32') im2 = image.imresize(data,299,299).astype('float32') # im1 = image.imresize(data.astype('float32') / 255, 224, 224) # im2 = image.imresize(data.astype('float32')/255,299,299) auglist1 = image.CreateAugmenter(data_shape=(3, 224, 224), resize=0, rand_crop=True, rand_resize=True, rand_mirror=True, mean=np.array([0.485, 0.456, 0.406]), std=np.array([0.229, 0.224, 0.225]), brightness=0.125, contrast=0.5, saturation=0, hue=0, pca_noise=0, rand_gray=1, inter_method=2) auglist2 = image.CreateAugmenter(data_shape=(3,299,299), resize=0, rand_crop=True, rand_resize=True, rand_mirror=True, mean=np.array([0.485, 0.456, 0.406]), std=np.array([0.229, 0.224, 0.225]), brightness=0.125, contrast=0.5, saturation=0, hue=0, pca_noise=0, rand_gray=1, inter_method=2) for aug in auglist1: im1 = aug(im1) for aug in auglist2: im2 = aug(im2) # (0,1,2)-(2,0,1) im1 = nd.transpose(im1, (2,0,1)) im2 = nd.transpose(im2, (2,0,1)) return (im1,im2,nd.array([label]).asscalar().astype('float32')) def transform_test(data, label): im1 = image.imresize(data,224,224).astype('float32') im2 = image.imresize(data,299,299).astype('float32') # im1 = image.imresize(data.astype('float32') / 255, 224, 224) # im2 = image.imresize(data.astype('float32') / 255, 299, 299) auglist1 = image.CreateAugmenter(data_shape=(3,224,224), mean=np.array([0.485, 0.456, 0.406]), std=np.array([0.229, 0.224, 0.225])) auglist2 = image.CreateAugmenter(data_shape=(3,299,299), mean=np.array([0.485, 0.456, 0.406]), std=np.array([0.229, 0.224, 0.225])) for aug in auglist1: im1 = aug(im1) for aug in auglist2: im2 = aug(im2) im1 = nd.transpose(im1, (2,0,1)) im2 = nd.transpose(im2, (2,0,1)) return (im1,im2,nd.array([label]).asscalar().astype('float32')) and when i run my code: def SaveNd(data,net,name): x =[] y =[] for fear1,fear2,label in tqdm(data): fear1 = fear1.as_in_context(mx.gpu()) fear2 = fear2.as_in_context(mx.gpu()) # fear3 = fear3.as_in_context(mx.gpu()) out = net(fear1,fear2).as_in_context(mx.cpu()) x.append(out) y.append(label) x = nd.concat(*x,dim=0) y = nd.concat(*y,dim=0) nd.save(name,[x,y]) SaveNd(train_data,net,'train.nd') SaveNd(valid_data,net,'valid.nd') SaveNd(train_valid_data,net,'input.nd') i come across the error: File "C:\Python_3.6.2\lib\site-packages\mxnet\base.py", line 210, in check_call raise MXNetError(py_str(_LIB.MXGetLastError())) mxnet.base.MXNetError: Error in operator pool0_fwd: [02:02:07] C:\Jenkins\workspace\mxnet\mxnet\src\operator\nn\pooling.cc:99: Check failed: dshape.ndim() >= 3U (2 vs. 3) Pooling: Input data should be 3D in (batch, channel, x) Or 4D in (batch, channel, y, x) Or 5D in (batch, channel, d, y, x)
---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
