使用TensorFlow填充音频时触发Dimension >=0 [Op:Fill]报错如何解决?
报错触发原因
- 核心原因是计算填充长度时未做非负校验:当输入
waveform的实际长度大于48000时,48000 - tf.shape(waveform)的计算结果为负数,而tf.zeros要求输入的维度参数必须≥0,因此触发维度合法性报错。 - 额外逻辑问题:直接用Python列表
[48000]和张量tf.shape(waveform)做减法,运算优先级和维度匹配逻辑不符合预期,也是计算结果异常的诱因。
修复方案
首先对填充长度做非负限制,同时补充超长音频的截断逻辑,完整处理代码如下:
# 取音频实际长度 wave_len = tf.shape(waveform)[0] # 计算需要填充的长度,最小为0,避免出现负数 pad_len = tf.maximum(0, 48000 - wave_len) # 生成对应长度的0填充张量 zero_padding = tf.zeros([pad_len], dtype=tf.float32) # 拼接得到固定长度音频:原音频超过48000则截断,不足则补0 waveform_padded = tf.concat([waveform[:48000], zero_padding], axis=0)
上述处理后,最终输出的waveform_padded长度固定为48000,不会再出现维度负数报错。
内容的提问来源于stack exchange,提问作者user7823094978
相关产品推荐
相关产品推荐

