Exemplo n.º 1
0
    def eval(self, mode):
        # Validate the network on the val_loader (during training) or test_loader (for checking result)
        # During training use this function for validation data.
        self.set_mode(mode)
        
        eval_loss = 0.0
        avg_auc1 = []
        avg_ap1 = []
        avg_auc2 = []
        avg_ap2 = []
        for i, data in enumerate(self.dataloader):
            audio = data['audio'].to(device)
            label = data['label'].to(device)

            outputs = self.samplecnn(audio)
            loss = self.bce(outputs, label)
            
            auc1, aprec1 = utils.tagwise_aroc_ap(label.cpu().detach().numpy(), outputs.cpu().detach().numpy())
            avg_auc1.append(np.mean(auc1))
            avg_ap1.append(np.mean(aprec1))
            auc2, aprec2 = utils.itemwise_aroc_ap(label.cpu().detach().numpy(), outputs.cpu().detach().numpy())
            avg_auc2.append(np.mean(auc2))
            avg_ap2.append(np.mean(aprec2))

            eval_loss += loss.item()  # loss.data[0]

        avg_loss = eval_loss/len(self.dataloader)
        print ("Retrieval : Average AROC = %.3f, AP = %.3f / "%(np.mean(avg_auc1), np.mean(avg_ap1)), "Annotation : Average AROC = %.3f, AP = %.3f"%(np.mean(avg_auc2), np.mean(avg_ap2)))
        print ('Average loss: {:.4f} \n'. format(avg_loss))
        return avg_loss
Exemplo n.º 2
0
def test():
    avg_auc1 = []
    avg_ap1 = []
    avg_auc2 = []
    avg_ap2 = []
    acc = 0
    n = 0
    phar = tqdm(test_loader, unit='valid', unit_scale=test_loader.batch_size)
    for audio, label in phar:
        audio = audio.to(device)
        label = label.to(device)

        pred = sampleModel(audio)

        auc1, aprec1 = utils.tagwise_aroc_ap(label.cpu().data.numpy(),
                                             pred.cpu().data.numpy())
        avg_auc1.append(np.mean(auc1))
        avg_ap1.append(np.mean(aprec1))
        auc2, aprec2 = utils.itemwise_aroc_ap(label.cpu().data.numpy(),
                                              pred.cpu().data.numpy())
        avg_auc2.append(np.mean(auc2))
        avg_ap2.append(np.mean(aprec2))
        acc += torch.sum(
            torch.argmax(pred, dim=1) == torch.argmax(label, dim=1))
        n += audio.size()[0]
    phar.set_postfix({
        'acc': acc.item() / n,
        'Retrieval: AROC': np.mean(avg_auc1),
        'Retrieval: AP ': np.mean(avg_ap1),
        'Annotation: AROC ': np.mean(avg_auc2),
        'Annotation: AP ': np.mean(avg_ap2),
    })
    print('acc', acc.item() / n)
Exemplo n.º 3
0
    def eval():
        self.set_mode('valid')

        eval_loss = 0.0
        avg_auc1 = []
        avg_ap1 = []
        avg_auc2 = []
        avg_ap2 = []
        for i, data in enumerate(self.dataloader):
            audio = data['audio'].to(device)
            label = data['label'].to(device)

            outputs = self.samplecnn(audio)
            loss = self.bce(outputs, label)

            auc1, aprec1 = utils.tagwise_aroc_ap(label.cpu().detach().numpy(),
                                                 outputs.cpu().detach.numpy())
            avg_auc1.append(np.mean(auc1))
            avg_ap1.append(np.mean(aprec1))
            auc2, aprec2 = utils.itemwise_aroc_ap(label.cpu().detach.numpy(),
                                                  outputs.cpu().detach.numpy())
            avg_auc2.append(np.mean(auc2))
            avg_ap2.append(np.mean(aprec2))

            eval_loss += loss.data[0]

        avg_loss = eval_loss / len(val_loader)
        print(
            "Retrieval : Average AROC = %.3f, AP = %.3f / " %
            (np.mean(avg_auc1), np.mean(avg_ap1)),
            "Annotation : Average AROC = %.3f, AP = %.3f" %
            (np.mean(avg_auc2), np.mean(avg_ap2)))
        print('Average loss: {:.4f} \n'.format(avg_loss))
        return avg_loss
def train(epoch):
    avg_auc1 = []
    avg_ap1 = []
    avg_auc2 = []
    avg_ap2 = []
    i = 0
    n = 0
    acc = 0
    phar = tqdm(train_loader, unit='train', unit_scale=train_loader.batch_size)
    for audio, label in phar:
        audio = torch.unsqueeze(audio, dim=1)
        audio = audio.to(device)
        label = label.to(device)

        pred = sampleModel(audio)
        loss = criterion(pred, label)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        # n += audio.size()[0].item()

        if (i + 1) % 10 == 0:
            # print("Epoch [%d/%d], Iter [%d/%d] loss : %.4f" % (
            #     epoch + 1, args.epochs, i + 1, len(train_loader), loss.item()))

            # retrieval
            auc1, ap1 = utils.tagwise_aroc_ap(label.cpu().detach().numpy(),
                                              pred.cpu().detach().numpy())
            avg_auc1.append(np.mean(auc1))
            avg_ap1.append(np.mean(ap1))
            # annotation
            auc2, ap2 = utils.itemwise_aroc_ap(label.cpu().detach().numpy(),
                                               pred.cpu().detach().numpy())
            avg_auc2.append(np.mean(auc2))
            avg_ap2.append(np.mean(ap2))

            print(
                "Retrieval : AROC = %.3f, AP = %.3f / " %
                (np.mean(auc1), np.mean(ap1)),
                "Annotation : AROC = %.3f, AP = %.3f" %
                (np.mean(auc2), np.mean(ap2)))
        i += 1
        acc += torch.sum(
            torch.argmax(pred, dim=1) == torch.argmax(label, dim=1))
        n += audio.size()[0]
        phar.set_postfix({
            'loss': loss.item(),
            'acc': acc.item() / n,
            'Retrieval: AROC': np.mean(avg_auc1),
            'Retrieval: AP ': np.mean(avg_ap1),
            'Annotation: AROC ': np.mean(avg_auc2),
            'Annotation: AP ': np.mean(avg_ap2),
        })
        # print("Retrieval : Average AROC = %.3f, AP = %.3f / " % (np.mean(avg_auc1), np.mean(avg_ap1)),
        #       "Annotation :Average AROC = %.3f, AP = %.3f" % (np.mean(avg_auc2), np.mean(avg_ap2)))
        # print('Evaluating...')

    torch.save(sampleModel.state_dict(),
               'checkpoints/speechcommand/sampleCNN_' + str(epoch) + '.pth')
Exemplo n.º 5
0
    def train(self) :
        # Train the network
        for epoch in range(config.NUM_EPOCHS):
            self.set_mode('train') 

            avg_auc1 = []
            avg_ap1 = []
            avg_auc2 = []
            avg_ap2 = []

            for i, data in enumerate(self.dataloader):
                audio = data['audio'].to(device)
                label = data['label'].to(device)

                outputs = self.samplecnn(audio)
                loss = self.bce(outputs, label)
                self.optimizer.zero_grad()
                loss.backward()
                self.optimizer.step()
                
                if (i+1) % 10 == 0:
                    print ("Epoch [%d/%d], Iter [%d/%d] loss : %.4f" % (epoch+1, config.NUM_EPOCHS, i+1, len(self.dataloader), loss.item()))

                    # retrieval 
                    auc1, ap1 = utils.tagwise_aroc_ap(label.cpu().detach().numpy(), outputs.cpu().detach().numpy())
                    avg_auc1.append(np.mean(auc1))
                    avg_ap1.append(np.mean(ap1))
                    # annotation
                    auc2, ap2 = utils.itemwise_aroc_ap(label.cpu().detach().numpy(), outputs.cpu().detach().numpy())
                    avg_auc2.append(np.mean(auc2))
                    avg_ap2.append(np.mean(ap2))
                    
                    print ("Retrieval : AROC = %.3f, AP = %.3f / "%(np.mean(auc1), np.mean(ap1)), "Annotation : AROC = %.3f, AP = %.3f"%(np.mean(auc2), np.mean(ap2)))

            self.curr_epoch +=1

            print ("Retrieval : Average AROC = %.3f, AP = %.3f / "%(np.mean(avg_auc1), np.mean(avg_ap1)), "Annotation :Average AROC = %.3f, AP = %.3f"%(np.mean(avg_auc2), np.mean(avg_ap2)))
            print ('Evaluating...')
            eval_loss = self.eval('valid')
                
            self.scheduler.step(eval_loss)  # use the learning rate scheduler
            curr_lr = self.optimizer.param_groups[0]['lr']
            print ('Learning rate : {}'.format(curr_lr))
            if curr_lr < 1e-7:
                print ("Early stopping")
                break

        torch.save(self.samplecnn.state_dict(), os.path.join(self.model_savepath, self.samplecnn.__class__.__name__ + '_' + str(self.curr_epoch) + '.pth'))
def eval(epoch):
    eval_loss = 0.0
    avg_auc1 = []
    avg_ap1 = []
    avg_auc2 = []
    avg_ap2 = []
    acc = 0
    n = 0
    phar = tqdm(valid_loader, unit='valid', unit_scale=valid_loader.batch_size)
    for audio, label in phar:
        audio = torch.unsqueeze(audio, dim=1)
        audio = audio.to(device)
        label = label.to(device)

        pred = sampleModel(audio)
        loss = criterion(pred, label)

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        auc1, aprec1 = utils.tagwise_aroc_ap(label.cpu().data.numpy(),
                                             pred.cpu().data.numpy())
        avg_auc1.append(np.mean(auc1))
        avg_ap1.append(np.mean(aprec1))
        auc2, aprec2 = utils.itemwise_aroc_ap(label.cpu().data.numpy(),
                                              pred.cpu().data.numpy())
        avg_auc2.append(np.mean(auc2))
        avg_ap2.append(np.mean(aprec2))
        acc += torch.sum(
            torch.argmax(pred, dim=1) == torch.argmax(label, dim=1))
        eval_loss += loss.item()
        n += audio.size()[0]
    avg_loss = eval_loss / len(valid_loader)
    phar.set_postfix({
        'loss': avg_loss,
        'acc': acc.item() / n,
        'Retrieval: AROC': np.mean(avg_auc1),
        'Retrieval: AP ': np.mean(avg_ap1),
        'Annotation: AROC ': np.mean(avg_auc2),
        'Annotation: AP ': np.mean(avg_ap2),
    })
    # print("Retrieval : Average AROC = %.3f, AP = %.3f / " % (np.mean(avg_auc1), np.mean(avg_ap1)),
    #       "Annotation : Average AROC = %.3f, AP = %.3f" % (np.mean(avg_auc2), np.mean(avg_ap2)))
    # print('Average loss: {:.4f} \n'.format(avg_loss))
    return avg_loss