diff --git a/keras/src/layers/core/dense.py b/keras/src/layers/core/dense.py index 8af0120c510..8ccbbfa3c11 100644 --- a/keras/src/layers/core/dense.py +++ b/keras/src/layers/core/dense.py @@ -1,4 +1,5 @@ import math +import numbers import ml_dtypes @@ -94,6 +95,16 @@ def __init__( lora_alpha=None, **kwargs, ): + if ( + not isinstance(units, numbers.Integral) + or isinstance(units, bool) + or units <= 0 + ): + raise ValueError( + "Received an invalid value for `units`, expected a positive " + f"integer. Received: units={units}" + ) + super().__init__(activity_regularizer=activity_regularizer, **kwargs) self.units = units self.activation = activations.get(activation) diff --git a/keras/src/layers/core/dense_test.py b/keras/src/layers/core/dense_test.py index 802ca10a1d4..6550367a3fa 100644 --- a/keras/src/layers/core/dense_test.py +++ b/keras/src/layers/core/dense_test.py @@ -58,6 +58,17 @@ def test_dense_basics(self): supports_masking=True, ) + @parameterized.named_parameters( + ("zero", 0), + ("negative", -3), + ("float", 2.5), + ("none", None), + ("string", "64"), + ) + def test_dense_invalid_units_raises(self, units): + with self.assertRaisesRegex(ValueError, "positive integer"): + layers.Dense(units) + def test_dense_correctness(self): # With bias and activation. layer = layers.Dense(units=2, activation="relu")