def linear_nn( experiment="one_month_forecast", include_pred_month=True, surrounding_pixels=None, explain=False, static="features", ignore_vars=None, num_epochs=50, early_stopping=5, layer_sizes=[100], predict_delta=False, spatial_mask=None, include_latlons=False, ): predictor = LinearNetwork( layer_sizes=layer_sizes, data_folder=get_data_path(), experiment=experiment, include_pred_month=include_pred_month, surrounding_pixels=surrounding_pixels, static=static, ignore_vars=ignore_vars, predict_delta=predict_delta, spatial_mask=spatial_mask, include_latlons=include_latlons, ) predictor.train(num_epochs=num_epochs, early_stopping=early_stopping) predictor.evaluate(save_preds=True) predictor.save_model() if explain: _ = predictor.explain(save_shap_values=True)
def linear_nn( experiment="one_month_forecast", include_pred_month=True, surrounding_pixels=None, ignore_vars=None, include_static=True, ): # if the working directory is alread ml_drought don't need ../data if Path(".").absolute().as_posix().split("/")[-1] == "ml_drought": data_path = Path("data") else: data_path = Path("../data") predictor = LinearNetwork( layer_sizes=[100], data_folder=data_path, experiment=experiment, include_pred_month=include_pred_month, surrounding_pixels=surrounding_pixels, ignore_vars=ignore_vars, include_static=include_static, ) predictor.train(num_epochs=50, early_stopping=5) predictor.evaluate(save_preds=True) predictor.save_model()
def test_save(self, tmp_path, monkeypatch): layer_sizes = [10] input_layer_sizes = copy(layer_sizes) input_size = 10 dropout = 0.25 include_pred_month = True include_latlons = True include_monthly_aggs = True surrounding_pixels = 1 ignore_vars = ['precip'] include_yearly_aggs = True def mocktrain(self): self.model = LinearModel(input_size, layer_sizes, dropout, include_pred_month, include_latlons, include_yearly_aggs, include_static=True) self.input_size = input_size monkeypatch.setattr(LinearNetwork, 'train', mocktrain) model = LinearNetwork(data_folder=tmp_path, layer_sizes=layer_sizes, dropout=dropout, experiment='one_month_forecast', include_pred_month=include_pred_month, include_latlons=include_latlons, include_monthly_aggs=include_monthly_aggs, include_yearly_aggs=include_yearly_aggs, surrounding_pixels=surrounding_pixels, ignore_vars=ignore_vars) model.train() model.save_model() assert (tmp_path / 'models/one_month_forecast/linear_network/model.pt' ).exists(), f'Model not saved!' model_dict = torch.load(model.model_dir / 'model.pt', map_location='cpu') for key, val in model_dict['model']['state_dict'].items(): assert (model.model.state_dict()[key] == val).all() assert model_dict['dropout'] == dropout assert model_dict['layer_sizes'] == input_layer_sizes assert model_dict['model']['input_size'] == input_size assert model_dict['include_pred_month'] == include_pred_month assert model_dict['include_latlons'] == include_latlons assert model_dict['include_monthly_aggs'] == include_monthly_aggs assert model_dict['include_yearly_aggs'] == include_yearly_aggs assert model_dict['surrounding_pixels'] == surrounding_pixels assert model_dict['ignore_vars'] == ignore_vars
def linear_nn(experiment='one_month_forecast', include_pred_month=True, surrounding_pixels=1): # if the working directory is alread ml_drought don't need ../data if Path('.').absolute().as_posix().split('/')[-1] == 'ml_drought': data_path = Path('data') else: data_path = Path('../data') predictor = LinearNetwork(layer_sizes=[100], data_folder=data_path, experiment=experiment, include_pred_month=include_pred_month, surrounding_pixels=surrounding_pixels) predictor.train(num_epochs=50, early_stopping=5) predictor.evaluate(save_preds=True) predictor.save_model() _ = predictor.explain(save_shap_values=True)
def linear_nn( experiment="one_month_forecast", include_pred_month=True, surrounding_pixels=None, ignore_vars=None, pretrained=False, ): predictor = LinearNetwork( layer_sizes=[100], data_folder=get_data_path(), experiment=experiment, include_pred_month=include_pred_month, surrounding_pixels=surrounding_pixels, ignore_vars=ignore_vars, ) predictor.train(num_epochs=50, early_stopping=5) predictor.evaluate(save_preds=True) predictor.save_model() _ = predictor.explain(save_shap_values=True)
def test_save(self, tmp_path, monkeypatch): layer_sizes = [10] input_layer_sizes = copy(layer_sizes) input_size = 10 dropout = 0.25 include_pred_month = True include_latlons = True include_monthly_aggs = True surrounding_pixels = 1 ignore_vars = ["precip"] include_yearly_aggs = True normalize_y = False def mocktrain(self): self.model = LinearModel( input_size, layer_sizes, dropout, include_pred_month, include_latlons, include_yearly_aggs, include_static=True, include_prev_y=True, ) self.input_size = input_size monkeypatch.setattr(LinearNetwork, "train", mocktrain) model = LinearNetwork( data_folder=tmp_path, layer_sizes=layer_sizes, dropout=dropout, experiment="one_month_forecast", include_pred_month=include_pred_month, include_latlons=include_latlons, include_monthly_aggs=include_monthly_aggs, include_yearly_aggs=include_yearly_aggs, surrounding_pixels=surrounding_pixels, ignore_vars=ignore_vars, include_prev_y=True, normalize_y=normalize_y, ) model.train() model.save_model() assert (tmp_path / "models/one_month_forecast/linear_network/model.pt" ).exists(), f"Model not saved!" model_dict = torch.load(model.model_dir / "model.pt", map_location="cpu") for key, val in model_dict["model"]["state_dict"].items(): assert (model.model.state_dict()[key] == val).all() assert model_dict["dropout"] == dropout assert model_dict["layer_sizes"] == input_layer_sizes assert model_dict["model"]["input_size"] == input_size assert model_dict["include_pred_month"] == include_pred_month assert model_dict["include_latlons"] == include_latlons assert model_dict["include_monthly_aggs"] == include_monthly_aggs assert model_dict["include_yearly_aggs"] == include_yearly_aggs assert model_dict["surrounding_pixels"] == surrounding_pixels assert model_dict["ignore_vars"] == ignore_vars assert model_dict["include_prev_y"] is True assert model_dict["normalize_y"] == normalize_y