diff --git a/src/gfdl/model.py b/src/gfdl/model.py index 2f4f216..1806af6 100644 --- a/src/gfdl/model.py +++ b/src/gfdl/model.py @@ -49,7 +49,7 @@ def fit(self, X, Y): # Y shape: (n_samples, n_classes-1) if self.reg_alpha is not None and self.reg_alpha < 0.0: raise ValueError("Negative reg_alpha. Expected range : None or [0.0, inf).") - hidden_layer_sizes = np.asarray(self.hidden_layer_sizes) + hidden_layer_sizes = np.atleast_1d(np.asarray(self.hidden_layer_sizes)) if hidden_layer_sizes.min() < 1: raise ValueError("hidden_layer_sizes must be > 0, " f"got {hidden_layer_sizes}") @@ -144,7 +144,7 @@ def partial_fit(self, X, y): fn = resolve_activation(self.activation)[1] self._activation_fn = fn self._N = X.shape[1] - hidden_layer_sizes = np.asarray(self.hidden_layer_sizes) + hidden_layer_sizes = np.atleast_1d(np.asarray(self.hidden_layer_sizes)) self._weight_mode = resolve_weight(self.weight_scheme) # weights shape: (n_layers,) @@ -565,7 +565,7 @@ def fit(self, X, Y): if self.reg_alpha is not None and self.reg_alpha < 0.0: raise ValueError("Negative reg_alpha. Expected range : None or [0.0, inf).") - hidden_layer_sizes = np.asarray(self.hidden_layer_sizes) + hidden_layer_sizes = np.atleast_1d(np.asarray(self.hidden_layer_sizes)) if hidden_layer_sizes.min() < 1: raise ValueError("hidden_layer_sizes must be > 0, " f"got {hidden_layer_sizes}") @@ -632,7 +632,7 @@ def partial_fit(self, X, Y): fn = resolve_activation(self.activation)[1] self._activation_fn = fn self._N = X.shape[1] - hidden_layer_sizes = np.asarray(self.hidden_layer_sizes) + hidden_layer_sizes = np.atleast_1d(np.asarray(self.hidden_layer_sizes)) self._weight_mode = resolve_weight(self.weight_scheme) self.W_ = [] diff --git a/src/gfdl/tests/test_model.py b/src/gfdl/tests/test_model.py index 66ce1af..6ce2897 100644 --- a/src/gfdl/tests/test_model.py +++ b/src/gfdl/tests/test_model.py @@ -822,3 +822,23 @@ def test_gh_85_classifiers(hidden_layer_sizes, classifier): clf = classifier(hidden_layer_sizes=hidden_layer_sizes, seed=0) with pytest.raises(ValueError, match="must be > 0"): clf.fit(X, y) + +@pytest.mark.parametrize( + "Classifier", + [GFDLClassifier, EnsembleGFDLClassifier], +) +def test_scalar_hidden_layer_sizes(Classifier): + X, y = make_classification( + n_samples=60, + n_features=10, + n_informative=5, + random_state=42, + ) + + model = Classifier(hidden_layer_sizes=3, seed=0) + model.fit(X, y) + + predictions = model.predict(X[:5]) + assert predictions.shape == (5,) + +