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
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
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()
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(