def default_validate_gate(gate_base_dir, validation_processor_configs): model = torch.load( os.path.join(gate_base_dir, 'reproducibility', 'model.pt'), map_location=torch.device(TorchUtils.get_accelerator_type())) results = torch.load( os.path.join(gate_base_dir, 'reproducibility', "results.pickle"), map_location=torch.device(TorchUtils.get_accelerator_type())) experiment_configs = load_configs( os.path.join(gate_base_dir, 'reproducibility', 'configs.yaml')) results_dir = init_dirs(gate_base_dir, is_main=True) criterion = manager.get_criterion(experiment_configs["algorithm"]) waveform_transforms = transforms.Compose([ PlateausToPoints( experiment_configs['processor']["data"]['waveform'] ), # Required to remove plateaus from training because the perceptron cannot accept less than 10 values for each gate PointsToPlateaus(validation_processor_configs["data"]["waveform"]) ]) validate_gate(model, results, validation_processor_configs, criterion, results_dir=results_dir, transforms=waveform_transforms)
def validate_vcdim(vcdim_base_dir, validation_processor_configs, is_main=True): base_dir = init_dirs(vcdim_base_dir, is_main=is_main) dirs = [ os.path.join(vcdim_base_dir, o) for o in os.listdir(vcdim_base_dir) if os.path.isdir(os.path.join(vcdim_base_dir, o)) ] for d in dirs: if os.path.split(d)[1] != "validation": gate_dir = create_directory( os.path.join(base_dir, d.split(os.path.sep)[-1])) model = torch.load(os.path.join(d, 'reproducibility', 'model.pt'), map_location=torch.device( TorchUtils.get_accelerator_type())) results = torch.load( os.path.join(d, 'reproducibility', "results.pickle"), map_location=torch.device(TorchUtils.get_accelerator_type())) experiment_configs = load_configs( os.path.join(d, 'reproducibility', "configs.yaml")) #results_dir = init_dirs(d, is_main=is_main) criterion = manager.get_criterion(experiment_configs["algorithm"]) waveform_transforms = transforms.Compose([ PlateausToPoints( experiment_configs['processor']["data"]['waveform'] ), # Required to remove plateaus from training because the perceptron cannot accept less than 10 values for each gate PointsToPlateaus( validation_processor_configs["data"]["waveform"]) ]) # validate_gate(os.path.join(d, "reproducibility"), base_dir, is_main=False) validate_gate(model, results, validation_processor_configs, criterion, results_dir=gate_dir, transforms=waveform_transforms, is_main=False)
plt.xlabel("Accuracy values") plt.ylabel("Counts") plt.savefig(os.path.join(save_dir, "accuracy_histogram_" + label + "." + extension)) if show_plots: plt.show() if __name__ == "__main__": from torchvision import transforms from brainspy.utils import manager from brainspy.utils.io import load_configs from brainspy.utils.transforms import DataToTensor, DataToVoltageRange from brainspy.processors.dnpu import DNPU V_MIN = [-1.2, -1.2] V_MAX = [0.6, 0.6] transforms = transforms.Compose( [DataToVoltageRange(V_MIN, V_MAX, -1, 1), DataToTensor(torch.device('cpu'))] ) configs = load_configs("configs/ring.yaml") criterion = manager.get_criterion(configs["algorithm"]) algorithm = manager.get_algorithm(configs["algorithm"]) search_solution(configs, DNPU, criterion, algorithm, transforms=transforms)