lr_schedulers.step(epoch)

            if epoch % 2 == 0:
                def_loss, total_loss, ter_accs, pro_accs = run_epoch(npi, 'eval', eval_data, writer, os.path.join(exp_dir, 'npi_{}.pth'.format(epoch)))
                if def_loss < Best_results['def_loss']:
                    Best_results['def_loss'] = def_loss
                    Best_results['epoch_def_loss'] = epoch
                if total_loss < Best_results['total_loss']:
                    Best_results['total_loss'] = total_loss
                    Best_results['epoch_total_loss'] = epoch
                if ter_accs > Best_results['ter_accs']:
                    Best_results['ter_accs'] = ter_accs
                    Best_results['epoch_ter_accs'] = epoch
                if pro_accs > Best_results['pro_accs']:
                    Best_results['pro_accs'] = pro_accs
                    Best_results['epoch_pro_accs'] = epoch

                torch.save(npi.state_dict(), os.path.join(exp_dir, 'npi_{}.pth'.format(epoch)))

        for key, val in Best_results.items():
            if key.find('epoch') != -1:
                print('Best %s for test same at %d epoch' % (key, val))
            else:
                print('Best %s for test same: %f' % (key, val))

    else:
        epoch = 6
        run_epoch(npi, 'test', test_data, None, os.path.join(exp_dir, 'npi_{}.pth'.format(epoch)))

            if epoch % 2 == 0:
                def_loss, total_loss, ter_accs, pro_accs = run_epoch(
                    npi, 'eval', eval_data, writer,
                    os.path.join(exp_dir, 'npi_{}.pth'.format(epoch)))
                if def_loss < Best_results['def_loss']:
                    Best_results['def_loss'] = def_loss
                    Best_results['epoch_def_loss'] = epoch
                if total_loss < Best_results['total_loss']:
                    Best_results['total_loss'] = total_loss
                    Best_results['epoch_total_loss'] = epoch
                if ter_accs > Best_results['ter_accs']:
                    Best_results['ter_accs'] = ter_accs
                    Best_results['epoch_ter_accs'] = epoch
                if pro_accs > Best_results['pro_accs']:
                    Best_results['pro_accs'] = pro_accs
                    Best_results['epoch_pro_accs'] = epoch

                torch.save(npi.state_dict(),
                           os.path.join(exp_dir, 'npi_{}.pth'.format(epoch)))

        for key, val in Best_results.items():
            if key.find('epoch') != -1:
                print('Best %s for test same at %d epoch' % (key, val))
            else:
                print('Best %s for test same: %f' % (key, val))

    else:
        epoch = 6
        run_epoch(npi, 'test', test_data, None,
                  os.path.join(exp_dir, 'npi_{}.pth'.format(epoch)))