Hi, I have trouble. When I run my graph convolutional model, the pytorch will respond the error message like:
AttributeError: Can’t get attribute ‘NusDatasetGCN’ on <module ‘main’ (built-in)>
##The NusDatasetGCN code:
class NusDatasetGCN(Dataset):
def init(self, data_path, anno_path, transforms, w2v_path):
self.transforms = transforms
    with open(anno_path) as fp:
        json_data = json.load(fp)
   # with open('small_train.json',encoding="utf-8") as fp:
        #json_data = json.loads(fp.read())
    samples = json_data['samples']
    self.classes = json_data['labels']

    self.imgs = []
    self.annos = []
    self.data_path = data_path
    print('loading', anno_path)
    for sample in samples:
        self.imgs.append(sample['image_name'])
        self.annos.append(sample['image_labels'])
    for item_id in range(len(self.annos)):
        item = self.annos[item_id]
        vector = [cls in item for cls in self.classes]
        self.annos[item_id] = np.array(vector, dtype=float)
    # Load vectorized labels for GCN from json.    
    with open(w2v_path) as fp:
        self.gcn_inp = np.array(json.load(fp)['vect_labels'], dtype=float)

def __getitem__(self, item):
    anno = self.annos[item]
    img_path = os.path.join(self.data_path, self.imgs[item])
    img = Image.open(img_path)
    if self.transforms is not None:
        img = self.transforms(img)
    return img, anno, self.gcn_inp

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

###################################
Run training.
epoch = 0
iteration = 0
while True:
batch_losses = []
for batch_number, (imgs, targets, gcn_input) in enumerate(train_dataloader):
imgs, targets, gcn_input = imgs.to(device), targets.to(device), gcn_input.to(device)
optimizer.zero_grad()
    model_result = model(imgs, gcn_input)
    loss = criterion(model_result, targets.type(torch.float))

    batch_loss_value = loss.item()
    loss.backward()
    torch.nn.utils.clip_grad_norm(model.parameters(), 10.0)
    
    optimizer.step()

    logger.add_scalar('train_loss', batch_loss_value, iteration)
    batch_losses.append(batch_loss_value)
    with torch.no_grad():
        result = calculate_metrics(model_result.cpu().numpy(), targets.cpu().numpy())
        for metric in result:
            logger.add_scalar('train/' + metric, result[metric], iteration)

    if iteration % test_freq == 0:
        model.eval()
        with torch.no_grad():
            model_result = []
            targets = []
            for imgs, batch_targets, gcn_input in test_dataloader:
                gcn_input = gcn_input.to(device)
                imgs = imgs.to(device)
                model_batch_result = model(imgs, gcn_input)
                model_result.extend(model_batch_result.cpu().numpy())
                targets.extend(batch_targets.cpu().numpy())

        result = calculate_metrics(np.array(model_result), np.array(targets))
        for metric in result:
            logger.add_scalar('test/' + metric, result[metric], iteration)
        print("epoch:{:2d} iter:{:3d} test: "
              "micro f1: {:.3f} "
              "macro f1: {:.3f} "
              "samples f1: {:.3f}".format(epoch, iteration,
                                          result['micro/f1'],
                                          result['macro/f1'],
                                          result['samples/f1']))

        model.train()
    iteration += 1

loss_value = np.mean(batch_losses)
print("epoch:{:2d} iter:{:3d} train: loss:{:.3f}".format(epoch, iteration, loss_value))
if epoch % save_freq == 0:
    checkpoint_save(model, save_path, epoch)
epoch += 1
if max_epoch_number < epoch:
    break

when I run training, I will get an error message. How can solve this problem? Very thanks!!