def eval_models(models_paths: list, path_to_data: str): if len(models_paths) == 0: return 0.0 # getting test loader ds = FashionMnistHandler(path_to_data, False) ds.download() ds.load() # noise parameters are not relevant since test loader shouldn't have noise _, _, test_loader = ds.get_noisy_loaders(0, '1', 0.2, 128, 128, 128) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') test_acc = [] for model_file in models_paths: # creating model checkpoint = torch.load(model_file, map_location=device) model_name = model_file.split("/")[-1] # loading from checkpoint model = CNNModel() model.load_state_dict(checkpoint['model_state_dict']) model.to(device) loss_fn = torch.nn.CrossEntropyLoss() # evaluating _, acc = Solver.eval(model, device, loss_fn=loss_fn, data_loader=test_loader) test_acc.append(acc) print(f"Model {model_name} has {acc:.4f} acc in test dataset") return test_acc
def solve(solver_name, problem_name, options): 'Solve the problem by solver with options.' # Set cpp_compiler options parameters["form_compiler"]["cpp_optimize"] = True # Set debug level set_log_active(options['debug']) # Set refinement level options['N'] = mesh_sizes[options['refinement_level']] # Create problem and solver problem = Problem(problem_name, options) solver = Solver(solver_name, options) time_step = solver.get_timestep(problem)[0] if MPI.process_number() == 0 and options['verbose']: print 'Problem: ' + str(problem) print 'Solver: ' + str(solver) # Solve problem with solver wct = time.time() u, p = solver.solve(problem) # Compute elapsed time wct = time.time() - wct # Compute number of degrees of freedom num_dofs = u.vector().size() + p.vector().size() # Get the mesh size mesh_size = u.function_space().mesh().hmin() # Get functional value and error functional, error = solver.eval() # Save results cpu_time = solver.cputime() save_results(problem, solver, num_dofs, mesh_size, time_step, functional, error) return 0