Esempio n. 1
0
def evalnet(net, signals, stages, epoch, plot_result={}):
    # net.eval()
    confusion_mat = np.zeros((opt.label, opt.label), dtype=int)
    for i, (signal, stage) in enumerate(zip(signals, stages), 1):

        signal = transformer.ToInputShape(signal,
                                          opt.model_name,
                                          test_flag=True)
        signal, stage = transformer.ToTensor(signal,
                                             stage,
                                             no_cuda=opt.no_cuda)
        with torch.no_grad():
            out = net(signal)
        pred = torch.max(out, 1)[1]

        pred = pred.data.cpu().numpy()
        stage = stage.data.cpu().numpy()
        for x in range(len(pred)):
            confusion_mat[stage[x]][pred[x]] += 1

    recall, acc, sp, err, k = statistics.result(confusion_mat)
    plot_result['test'].append(err)
    heatmap.draw(confusion_mat, opt.label_name, opt.label_name, name='test')
    print('recall,acc,sp,err,k: ' + str(statistics.result(confusion_mat)))
    return plot_result, confusion_mat
Esempio n. 2
0
def evalnet(net,
            signals,
            stages,
            sequences,
            epoch,
            plot_result={},
            mode='part'):
    # net.eval()
    if mode == 'part':
        transformer.shuffledata(signals, stages)
        signals = signals[0:int(len(stages) / 2)]
        stages = stages[0:int(len(stages) / 2)]

    confusion_mat = np.zeros((5, 5), dtype=int)
    for i, sequence in enumerate(sequences, 1):

        signal = transformer.ToInputShape(signals[sequence],
                                          opt.model_name,
                                          test_flag=True)
        signal, stage = transformer.ToTensor(signal,
                                             stages[sequence],
                                             no_cuda=opt.no_cuda)
        with torch.no_grad():
            out = net(signal)
        pred = torch.max(out, 1)[1]

        pred = pred.data.cpu().numpy()
        stage = stage.data.cpu().numpy()
        for x in range(len(pred)):
            confusion_mat[stage[x]][pred[x]] += 1
    if mode == 'part':
        plot_result['test'].append(statistics.result(confusion_mat)[0])
    else:
        recall, acc, error = statistics.result(confusion_mat)
        plot_result['test'].append(recall)
        heatmap.draw(confusion_mat, name='test')
        print('test avg_recall:', '%.4f' % recall, 'avg_acc:', '%.4f' % acc,
              'error:', '%.4f' % error)
        #util.writelog('epoch:'+str(epoch)+'  test avg_recall:'+str(round(recall,4))+'  avg_acc:'+str(round(acc,4))+'  error:'+str(round(error,4)))
    return plot_result, confusion_mat
Esempio n. 3
0
                                                 no_cuda=opt.no_cuda)

            out = net(signal)
            loss = criterion(out, stage)
            pred = torch.max(out, 1)[1]
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

            pred = pred.data.cpu().numpy()
            stage = stage.data.cpu().numpy()
            for x in range(len(pred)):
                confusion_mat[stage[x]][pred[x]] += 1
            if i % show_freq == 0:
                plot_result['train'].append(
                    statistics.result(confusion_mat)[0])
                heatmap.draw(confusion_mat, name='train')
                # plot_result=evalnet(net,signals_eval,stages_eval,plot_result,show_freq,mode = 'part')
                statistics.show(plot_result, epoch + i / (batch_length * 0.8))
                confusion_mat[:] = 0

        plot_result, confusion_mat = evalnet(net,
                                             signals,
                                             stages,
                                             test_sequences[fold],
                                             epoch + 1,
                                             plot_result,
                                             mode='all')
        confusion_mats.append(confusion_mat)
        # scheduler.step()
Esempio n. 4
0
                                             stage,
                                             no_cuda=opt.no_cuda)

        out = net(signal)
        loss = criterion(out, stage)
        pred = torch.max(out, 1)[1]
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        pred = pred.data.cpu().numpy()
        stage = stage.data.cpu().numpy()
        for x in range(len(pred)):
            confusion_mat[stage[x]][pred[x]] += 1
        if i % show_freq == 0:
            plot_result['train'].append(statistics.result(confusion_mat)[3])
            heatmap.draw(confusion_mat,
                         opt.label_name,
                         opt.label_name,
                         name='train')
            statistics.show(plot_result, epoch + i / (batch_length * 0.8))
            confusion_mat[:] = 0

    plot_result, confusion_mat = evalnet(net, signals_test, labels_test,
                                         epoch + 1, plot_result)
    confusion_mats.append(confusion_mat)
    # scheduler.step()

    torch.save(net.cpu().state_dict(), './checkpoints/last.pth')
    if (epoch + 1) % opt.network_save_freq == 0:
        torch.save(