访问AudioIOTensor元素导致Jupyter内核崩溃问题咨询
解决AudioIOTensor多维索引导致Jupyter内核崩溃的问题
这是TensorFlow IO 0.21.0版本里的一个已知BUG,根源在于AudioIOTensor的延迟加载机制和多维索引实现不兼容,直接用audio_tensor[1, 1]这种二维索引会触发底层内存访问错误,导致内核崩溃。
为什么audio_tensor[1]正常但audio_tensor[1,1]崩溃?
AudioIOTensor是延迟加载的特殊张量,它不会一次性把整个音频文件加载到内存,而是在你访问元素时才按需读取对应片段。audio_tensor[1]只触发了第一维度的切片操作,返回的是完整的单帧张量(形状(2,)),这个逻辑在旧版本里是正常的;但直接使用二维索引[1,1]时,旧版本的tfio处理逻辑存在缺陷,导致内存访问出错,进而让Jupyter内核崩溃。
可行的解决方案
先转为标准Tensor再索引
把AudioIOTensor转换成普通的tf.Tensor,之后就能正常使用多维索引了(注意:大音频文件会占用较多内存):audio_full = tf.convert_to_tensor(audio_tensor) print(audio_full[1, 1]) # 会输出预期的-3.859234e-16分两步索引
既然单维度索引正常,我们可以先取出单帧张量,再索引其中的第二个元素:single_frame = audio_tensor[1] print(single_frame[1]) # 同样能得到目标数值升级TensorFlow IO版本
这个BUG在后续的tfio版本中已经被修复,建议你升级到较新的稳定版本:pip install --upgrade tensorflow-io升级后直接使用
audio_tensor[1, 1]就不会再出现内核崩溃的问题了。
内容的提问来源于stack exchange,提问作者Jona Scholz
相关产品推荐
相关产品推荐

