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
- Set fft_length >= sequence_length (e.g. sequence_length=256, fft_length=512)
- Leave sequence_length=None so it defaults to fft_length
- 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
- Leave sequence_length unset to inherit fft_length
- Cross-check audio configs against librosa semantics before porting
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
- Unknown activation function '{activation}' cannot be seriali
- Could not interpret activation function identifier: {identif
- ConvNeXt does not support the `channels_first` image data fo
- If using `weights="imagenet"` with `include_top=True`, `clas
- The `weights` argument should be either `None` (random initi
AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25).
Data as JSON: /api/errors/de47bdef8a9ce51d.
Report an issue: GitHub.