M1 MacBook运行Keras CNN抛出NSRangeException空数组索引越界问题
问题原因
这个报错是M1芯片早期适配的TensorFlow测试版内置的MLCompute加速框架存在缺陷导致:你使用的tf2.4.0-rc0是苹果首次适配M1的预览版本,对ResNet模型的卷积层、padding层融合逻辑处理异常,调用空数组下标触发了OC层面的NSRangeException崩溃。
可行解决方案
方案1:升级TensorFlow到稳定版本(推荐)
目前苹果官方适配的TensorFlow稳定版已经修复了该问题,直接卸载旧预览版,安装最新的tensorflow-macos和tensorflow-metal包即可,适配M1的稳定版2.10+均无该问题。
方案2:临时禁用MLCompute加速(无需换版本)
如果暂时无法升级TensorFlow版本,在你的代码最开头添加以下代码关闭MLCompute加速,即可规避崩溃:
import os os.environ["TF_DISABLE_MLCOMPUTE"] = "1"
该方案会损失一部分推理速度,但可以正常跑通你的代码逻辑。
额外注意事项
你当前使用的Numpy 1.21.1和TensorFlow 2.4.0-rc0存在版本不兼容问题,如果禁用MLCompute后仍有其他报错,可以将numpy降级到1.19.5版本,适配tf2.4系列的依赖要求。
内容的提问来源于stack exchange,提问作者EW0824
相关产品推荐
相关产品推荐

