huggingface/transformers · error · ValueError
Cannot use log_mel option '{log_mel}' with power {power}
Error message
Cannot use log_mel option '{log_mel}' with power {power} What it means
Thrown by `spectrogram` when `log_mel="dB"` but `power` is neither 1.0 nor 2.0. The dB conversion delegates to `amplitude_to_db` for power==1.0 and `power_to_db` for power==2.0; any other exponent (e.g. 1.5, 3.0) has no defined dB reference, so it is rejected at the log-mel stage.
Source
Thrown at src/transformers/audio_utils.py:1011
spectrogram = np.abs(spectrogram, dtype=np.float64) ** power
spectrogram = spectrogram.T
if mel_filters is not None:
spectrogram = np.maximum(mel_floor, np.dot(mel_filters.T, spectrogram))
if power is not None and log_mel is not None:
if log_mel == "log":
spectrogram = np.log(spectrogram)
elif log_mel == "log10":
spectrogram = np.log10(spectrogram)
elif log_mel == "dB":
if power == 1.0:
spectrogram = amplitude_to_db(spectrogram, reference, min_value, db_range)
elif power == 2.0:
spectrogram = power_to_db(spectrogram, reference, min_value, db_range)
else:
raise ValueError(f"Cannot use log_mel option '{log_mel}' with power {power}")
else:
raise ValueError(f"Unknown log_mel option: {log_mel}")
spectrogram = np.asarray(spectrogram, dtype)
return spectrogram
def spectrogram_batch(
waveform_list: list[np.ndarray],
window: np.ndarray,
frame_length: int,
hop_length: int,
fft_length: int | None = None,
power: float | None = 1.0,
center: bool = True,
pad_mode: str = "reflect",
onesided: bool = True,View on GitHub (pinned to a597f97485)
Solutions
- Use power=2.0 (power spectrogram, standard for log-mel) or power=1.0 (magnitude) when log_mel="dB"
- If you need a non-standard power, use log_mel="log" or "log10" instead of "dB"
- Check the processor config for the power/log_mel pair
Example fix
// before spec = spectrogram(waveform, window, 400, 160, power=1.5, mel_filters=mel, log_mel="dB") # ValueError // after spec = spectrogram(waveform, window, 400, 160, power=2.0, mel_filters=mel, log_mel="dB")
Defensive patterns
Strategy: validation
Validate before calling
if log_mel == "dB":
if power not in (1.0, 2.0):
raise ValueError(f"log_mel='dB' requires power 1.0 or 2.0, got {power}")
spec = spectrogram(waveform, window, frame_length, hop_length, power=power, mel_filters=mel, log_mel=log_mel) Type guard
def db_log_mel_supported(power: float, log_mel) -> bool:
return log_mel != "dB" or power in (1.0, 2.0) Try / catch
try:
spec = spectrogram(..., power=power, mel_filters=mel, log_mel="dB")
except ValueError as e:
if "Cannot use log_mel option" in str(e):
spec = spectrogram(..., power=2.0, mel_filters=mel, log_mel="dB")
else:
raise Prevention
- Standardize on power=2.0 + log_mel='dB' for log-mel features
- Use 'log'/'log10' if you need non-standard exponents
- Validate the (power, log_mel) pair when loading configs
When it happens
Trigger: Calling `spectrogram(..., power=1.5, mel_filters=..., log_mel="dB")` or any non-{1.0, 2.0} power combined with log_mel="dB". Feature extractors that expose both power and log_mel in config can produce this pair.
Common situations: Custom processors experimenting with fractional spectrogram exponents; porting Whisper-style dB logs while keeping an exotic power value; configs edited so power no longer matches the 1.0/2.0 convention.
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
- Require min_frequency: {min_frequency} <= max_frequency: {ma
- You have provided `mel_filters` but `power` is `None`. Mel s
AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14).
Data as JSON: /api/errors/bbf5c1d43ed15ec7.
Report an issue: GitHub.