如何修复TensorFlow语音识别模型Squeeze维度不匹配InvalidArgumentError
错误定位
报错核心信息Can not squeeze dim[1], expected a dimension of 1, got 2指向代码中decode_audio函数的tf.squeeze(audio, axis=-1)行:
tf.audio.decode_wav读取wav文件后返回的音频张量格式为[采样点数量, 声道数]- 自行录制的音频为双声道(立体声),声道数维度值为2,而
tf.squeeze仅支持删除大小为1的维度,因此触发报错。
修复方案
方案1:代码侧兼容双声道输入(无需修改源音频)
直接修改decode_audio函数,自动将双声道合并为单声道即可:
def decode_audio(audio_binary): audio, _ = tf.audio.decode_wav(audio_binary) # 双声道取均值转为单声道,同时兼容单声道输入 if audio.shape[-1] == 2: audio = tf.reduce_mean(audio, axis=-1, keepdims=True) return tf.squeeze(audio, axis=-1)
方案2:源音频统一转为单声道(语音模型训练的常规方案)
在Audacity中批量处理录制的音频:
- 打开wav文件后,点击顶部菜单栏「轨道」→「混合」→「混合并渲染为单声道」
- 重新选择Signed 16-bit PCM编码导出wav文件,替换原有训练数据即可
内容的提问来源于stack exchange,提问作者Elsa B.
相关产品推荐
相关产品推荐

