Exemple #1
0
def test_epoch(model, data_loader, log_interval):
    model.eval()
    test_loss = 0
    correct = 0
    histogram_data = {key: [] for key in range(NUMBER_OF_CLASSES)}
    histogram_data['all'] = []
    for batch_index, (x_data_raw, target) in enumerate(data_loader):
        # x_data_ts = Variable(x_data_ts, volatile=True)
        x_data_raw = Variable(x_data_raw, volatile=True)
        target = Variable(target)
        output = model(x_data_raw)
        if type(output.data) == torch.cuda.DoubleTensor:
            output = output.cpu()
        test_loss += functional.binary_cross_entropy(output, target).data[0]
        pred = output.data.max(1)[1]
        target_column = target.data.max(1)[1]
        correct += pred.eq(target_column).sum()
        build_histogram(output, target_column, histogram_data)

        if batch_index % log_interval == 0 and batch_index > 1:
            LOGGER.info('Test iteration: {}, Correct count: {}'.format(
                batch_index, correct))

    test_loss /= len(data_loader.dataset)
    LOGGER.info(
        'Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
            test_loss, correct, len(data_loader.dataset),
            100. * correct / len(data_loader.dataset)))
    for key, value in histogram_data.items():
        histogram = Histogram(
            value,
            title='Percentage of Correctly Predicted: {}'.format(key),
            bins=10,
            number_range=(0.0, 1.0),
            histogram_type='numbers')
        print(histogram.horizontal())