def fit_hyperparameters(file, train, train_labels, cuda, gpu, save_memory=False): """ Creates a classifier from the given set of hyperparameters in the input file, fits it and return it. @param file Path of a file containing a set of hyperparemeters. @param train Training set. @param train_labels Labels for the training set. @param cuda If True, enables computations on the GPU. @param gpu GPU to use if CUDA is enabled. @param save_memory If True, save GPU memory by propagating gradients after each loss term, instead of doing it after computing the whole loss. """ classifier = scikit_wrappers.CausalCNNEncoderClassifier() # Loads a given set of hyperparameters and fits a model with those hf = open(os.path.join(file), 'r') params = json.load(hf) hf.close() # Check the number of input channels params['in_channels'] = numpy.shape(train)[1] params['cuda'] = cuda params['gpu'] = gpu classifier.set_params(**params) return classifier.fit( train, train_labels, save_memory=save_memory, verbose=True )
def load_classifier(save_path, dataset, cuda, gpu): """ Loads and returns classifier from the given parameters. @param save_path Path where the model is located. @param dataset Name of the dataset. @param cuda If True, enables computations on the GPU. @param gpu GPU to use if CUDA is enabled. """ classifier = scikit_wrappers.CausalCNNEncoderClassifier() hf = open(os.path.join(save_path, dataset + '_hyperparameters.json'), 'r') hp_dict = json.load(hf) hf.close() hp_dict['cuda'] = cuda hp_dict['gpu'] = gpu classifier.set_params(**hp_dict) classifier.load(os.path.join(save_path, dataset)) return classifier
if __name__ == '__main__': args = parse_arguments() if args.cuda and not torch.cuda.is_available(): print("CUDA is not available, proceeding without it...") args.cuda = False train, train_labels, test, test_labels = load_UEA_dataset( args.path, args.dataset ) if not args.load and not args.fit_classifier: classifier = fit_hyperparameters( args.hyper, train, train_labels, args.cuda, args.gpu, save_memory=True ) else: classifier = scikit_wrappers.CausalCNNEncoderClassifier() hf = open( os.path.join( args.save_path, args.dataset + '_hyperparameters.json' ), 'r' ) hp_dict = json.load(hf) hf.close() hp_dict['cuda'] = args.cuda hp_dict['gpu'] = args.gpu classifier.set_params(**hp_dict) classifier.load(os.path.join(args.save_path, args.dataset)) if not args.load: if args.fit_classifier: classifier.fit_classifier(classifier.encode(train), train_labels)