使用TensorFlow 1.7.0恢复MobileNet V2模型时遇OpKernel注册错误
解决TensorFlow 1.7.0恢复MobileNet V2时的'ShutdownDistributedTPU'错误
你的问题主要出在模型恢复路径错误和TF1.7与MobileNet V2的TPU操作兼容性上,咱们一步步来修复:
修正模型恢复路径
你在saver.restore()里传入的是.data-00000-of-00001文件,但TensorFlow的restore方法只需要传入ckpt的前缀名(也就是/mobilenet_v2_1.4_224.ckpt),它会自动关联对应的data和meta文件,不用指定具体的data后缀。解决TPU OpKernel未注册问题
TensorFlow 1.7.0属于较早的版本,而MobileNet V2的预训练模型内置了TPU相关操作(比如ShutdownDistributedTPU),但你的运行环境没有配置TPU支持,所以触发了这个错误。解决办法是在导入meta图时加上clear_devices=True参数,清除图中绑定的设备信息,避免强制调用TPU:saver = tf.train.import_meta_graph("/mobilenet_v2_1.4_224.ckpt.meta", clear_devices=True)清理冗余代码
你代码里提前定义的v1、v2变量和第一个saver = tf.train.Saver()都是冗余的,会干扰模型恢复流程,直接删掉就行。
修复后的完整代码如下:
import tensorflow as tf tf.reset_default_graph() with tf.Session() as sess: # 导入meta图并清除设备绑定,规避TPU操作报错 saver = tf.train.import_meta_graph("/mobilenet_v2_1.4_224.ckpt.meta", clear_devices=True) # 仅传入ckpt前缀路径即可完成恢复 saver.restore(sess, "/mobilenet_v2_1.4_224.ckpt") print("MobileNet V2模型恢复成功!")
额外提示:如果上述方法仍不生效,大概率是TF1.7.0对MobileNet V2的原生支持不足(MobileNet V2是在TF1.8版本后正式推出的)。如果条件允许,建议升级到TensorFlow 1.13.x或更高的TF1.x版本,兼容性会提升很多。
内容的提问来源于stack exchange,提问作者B Singh
相关产品推荐
相关产品推荐

