Incubator-mxnet: DataLoader Operator stack inferring shapes failed

Created on 12 Jun 2020  路  3Comments  路  Source: apache/incubator-mxnet

Description

I tried to use custom dataset with dataloader to train a model.
The error appears when use dataloader to get a batch.
Images are loaded in dataset correctly but all images and labels are None in batch.

import glob
from PIL import Image

import mxnet
from mxnet import nd
from mxnet.gluon.data import Dataset


class data(Dataset):
    def __init__(self, root_dir):    
        self.files = sorted(glob.glob(root_dir + '/*/*'))
        self.label = [nd.array(0) if x.split('/')[-1] == 'test' else nd.array(1) for x in self.files]

    def __len__(self):
        return len(self.files)

    def __getitem__(self, idx):
        image = Image.open(self.files[idx])
        image = nd.array(image)
        label = self.label[idx]
        return image, label

dataset = data(data_root)
test_dataset = dataset
test_loader = mxnet.gluon.data.DataLoader(test_dataset, batch_size = 4)

for (image, label) in train_loader:
    print(image)
    print(label)

Error Message

mxnet.base.MXNetError: [11:21:44] src/imperative/./imperative_utils.h:146: Operator stack inferring shapes failed.
input shapes:
None
None
None
None
output shapes:
None
operator attributes:
num_args : 4

Stack trace:
  [bt] (0) /home/***/.virtualenvs/torch/lib/python3.6/site-packages/mxnet/libmxnet.so(+0x6d554b) [0x7fed620f254b]
  [bt] (1) /home/***/.virtualenvs/torch/lib/python3.6/site-packages/mxnet/libmxnet.so(mxnet::imperative::SetShapeType(mxnet::Context const&, nnvm::NodeAttrs const&, std::vector<mxnet::NDArray*, std::allocator<mxnet::NDArray*> > const&, std::vector<mxnet::NDArray*, std::allocator<mxnet::NDArray*> > const&, mxnet::DispatchMode*)+0x363b) [0x7fed6538de8b]
  [bt] (2) /home/***/.virtualenvs/torch/lib/python3.6/site-packages/mxnet/libmxnet.so(mxnet::Imperative::Invoke(mxnet::Context const&, nnvm::NodeAttrs const&, std::vector<mxnet::NDArray*, std::allocator<mxnet::NDArray*> > const&, std::vector<mxnet::NDArray*, std::allocator<mxnet::NDArray*> > const&)+0x1db) [0x7fed65395dcb]
  [bt] (3) /home/***/.virtualenvs/torch/lib/python3.6/site-packages/mxnet/libmxnet.so(+0x3839f1f) [0x7fed65256f1f]
  [bt] (4) /home/***/.virtualenvs/torch/lib/python3.6/site-packages/mxnet/libmxnet.so(MXImperativeInvokeEx+0x62) [0x7fed652574e2]
  [bt] (5) /usr/lib/x86_64-linux-gnu/libffi.so.6(ffi_call_unix64+0x4c) [0x7fedacfc9dae]
  [bt] (6) /usr/lib/x86_64-linux-gnu/libffi.so.6(ffi_call+0x22f) [0x7fedacfc971f]
  [bt] (7) /usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so(_ctypes_callproc+0x2b4) [0x7fedad20a5c4]
  [bt] (8) /usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so(+0x11c33) [0x7fedad20ac33]

Environment

mxnet-cu101mkl 1.6.0
ubuntu 18.04
cuda 10.1
python 3.6.9

Bug

All 3 comments

could you please print the image.shape and label.shape in __getitem__?

The cause is that nd.stack doesn't support zero-shape array.
replacing self.label with self.label = [nd.array([0]) if x.split('/')[-1] == 'test' else nd.array([1]) for x in self.files] works.

Thanks a lot!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

xzqjack picture xzqjack  路  3Comments

ranti-iitg picture ranti-iitg  路  3Comments

JonBoyleCoding picture JonBoyleCoding  路  3Comments

qiliux picture qiliux  路  3Comments

dushoufu picture dushoufu  路  3Comments