huggingface/transformers · error · ValueError
Require min_frequency: {min_frequency} <= max_frequency: {ma
Error message
Require min_frequency: {min_frequency} <= max_frequency: {max_frequency} What it means
Thrown by `mel_filter_bank` when `min_frequency > max_frequency`. The triangular filters are distributed on the mel axis between these two bounds; an inverted or empty range makes filter placement impossible, so the function validates the ordering before computing anything.
Source
Thrown at src/transformers/audio_utils.py:698
If `"slaney"`, divide the triangular mel weights by the width of the mel band (area normalization).
mel_scale (`str`, *optional*, defaults to `"htk"`):
The mel frequency scale to use, `"htk"`, `"kaldi"` or `"slaney"`.
triangularize_in_mel_space (`bool`, *optional*, defaults to `False`):
If this option is enabled, the triangular filter is applied in mel space rather than frequency space. This
should be set to `true` in order to get the same results as `torchaudio` when computing mel filters.
Returns:
`np.ndarray` of shape (`num_frequency_bins`, `num_mel_filters`): Triangular filter bank matrix. This is a
projection matrix to go from a spectrogram to a mel spectrogram.
"""
if norm is not None and norm != "slaney":
raise ValueError('norm must be one of None or "slaney"')
if num_frequency_bins < 2:
raise ValueError(f"Require num_frequency_bins: {num_frequency_bins} >= 2")
if min_frequency > max_frequency:
raise ValueError(f"Require min_frequency: {min_frequency} <= max_frequency: {max_frequency}")
# center points of the triangular mel filters
mel_min = hertz_to_mel(min_frequency, mel_scale=mel_scale)
mel_max = hertz_to_mel(max_frequency, mel_scale=mel_scale)
mel_freqs = np.linspace(mel_min, mel_max, num_mel_filters + 2)
filter_freqs = mel_to_hertz(mel_freqs, mel_scale=mel_scale)
if triangularize_in_mel_space:
# frequencies of FFT bins in Hz, but filters triangularized in mel space
fft_bin_width = sampling_rate / ((num_frequency_bins - 1) * 2)
fft_freqs = hertz_to_mel(fft_bin_width * np.arange(num_frequency_bins), mel_scale=mel_scale)
filter_freqs = mel_freqs
else:
# frequencies of FFT bins in Hz
fft_freqs = np.linspace(0, sampling_rate // 2, num_frequency_bins)
mel_filters = _create_triangular_filter_bank(fft_freqs, filter_freqs)
View on GitHub (pinned to a597f97485)
Solutions
- Ensure min_frequency <= max_frequency (typically min ~20-0 Hz and max <= sampling_rate/2)
- If values come from a config, print them before the call and fix the swapped keys
- Double-check that max_frequency is actually set when you override min_frequency
Example fix
// before mel_filters = mel_filter_bank(num_frequency_bins=257, num_mel_filters=80, sampling_rate=16000, min_frequency=8000, max_frequency=0) # ValueError // after mel_filters = mel_filter_bank(num_frequency_bins=257, num_mel_filters=80, sampling_rate=16000, min_frequency=0, max_frequency=8000)
Defensive patterns
Strategy: validation
Validate before calling
if min_frequency > max_frequency:
raise ValueError(f"min_frequency ({min_frequency}) must be <= max_frequency ({max_frequency})")
mel = mel_filter_bank(num_frequency_bins=257, num_mel_filters=80, sampling_rate=16000, min_frequency=min_frequency, max_frequency=max_frequency) Type guard
def is_valid_freq_range(lo: float, hi: float, sr: int) -> bool:
return 0 <= lo <= hi <= sr / 2 Try / catch
try:
mel = mel_filter_bank(..., min_frequency=lo, max_frequency=hi)
except ValueError as e:
if "min_frequency" in str(e):
lo, hi = min(lo, hi), max(lo, hi) # auto-correct swapped bounds
mel = mel_filter_bank(..., min_frequency=lo, max_frequency=hi)
else:
raise Prevention
- Keep max_frequency <= sampling_rate/2 (Nyquist)
- Order config keys deliberately and validate ranges after loading
- Prefer sensible defaults (min 0-20 Hz, max 8000 Hz at 16 kHz)
When it happens
Trigger: Calling `mel_filter_bank` with the two frequency bounds swapped (e.g. min_frequency=8000, max_frequency=0), equal-and-nonzero mismatch is fine but inverted values raise; commonly happens when both are taken from a config dict in the wrong order or when max_frequency defaults to 0 while min is set.
Common situations: Feature extractor configs where frequency_min/frequency_max keys were transcribed in reverse; specifying min_frequency without a matching max; porting configs between models whose parameter naming differs.
Related errors
- mel_scale should be one of "htk", "slaney" or "kaldi".
- norm must be one of None or "slaney"
- Require num_frequency_bins: {num_frequency_bins} >= 2
- You have provided `mel_filters` but `power` is `None`. Mel s
- Cannot use log_mel option '{log_mel}' with power {power}
AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14).
Data as JSON: /api/errors/b19c2ab5a93fcef9.
Report an issue: GitHub.