keras-team/keras · error · ValueError

`fft_length` must be greater than or equal to `sequence_len

Error message

`fft_length` must be greater than or equal to  `sequence_length`. Received: `sequence_length`={self.sequence_length}, `fft_length`={self.fft_length}.

What it means

MelSpectrogram computes an STFT with a window of fft_length over frames of sequence_length; the window must cover the frame, so __init__ raises when fft_length < sequence_length. Note sequence_length defaults to fft_length when None, which is always safe.

Source

Thrown at keras/src/layers/preprocessing/mel_spectrogram.py:108

        sequence_stride=512,
        sequence_length=None,
        window="hann",
        sampling_rate=16000,
        num_mel_bins=128,
        min_freq=20.0,
        max_freq=None,
        power_to_db=True,
        top_db=80.0,
        mag_exp=2.0,
        min_power=1e-10,
        ref_power=1.0,
        **kwargs,
    ):
        self.fft_length = fft_length
        self.sequence_stride = sequence_stride
        self.sequence_length = sequence_length or fft_length
        if self.fft_length < self.sequence_length:
            raise ValueError(
                "`fft_length` must be greater than or equal to  "
                f" `sequence_length`. Received: `sequence_length`="
                f"{self.sequence_length}, `fft_length`={self.fft_length}."
            )
        self.window = window
        self.sampling_rate = sampling_rate
        self.num_mel_bins = num_mel_bins
        self.min_freq = min_freq
        self.max_freq = max_freq or int(sampling_rate / 2)
        self.power_to_db = power_to_db
        self.top_db = top_db
        self.mag_exp = mag_exp
        self.min_power = min_power
        self.ref_power = ref_power
        super().__init__(**kwargs)

    def call(self, inputs):
        dtype = (

View on GitHub (pinned to 7a34a03db6)

Solutions

  1. Set fft_length >= sequence_length (e.g. sequence_length=256, fft_length=512)
  2. Leave sequence_length=None so it defaults to fft_length
  3. Double-check parameter names when porting from librosa (n_fft vs win_length)

Example fix

// before
layer = MelSpectrogram(sequence_length=512, fft_length=256)
// after
layer = MelSpectrogram(sequence_length=256, fft_length=512)
Defensive patterns

Strategy: validation

Validate before calling

sl = sequence_length if sequence_length is not None else fft_length
assert fft_length >= sl, 'fft_length must be >= sequence_length'

Prevention

When it happens

Trigger: keras.layers.MelSpectrogram(sequence_length=512, fft_length=256); passing an explicit sequence_length larger than fft_length.

Common situations: Tuning audio preprocessing hyperparameters; porting librosa parameters where n_fft and win_length semantics differ; config typos swapping the two values.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25). Data as JSON: /api/errors/de47bdef8a9ce51d. Report an issue: GitHub.