keras TensorFlow模型工作,但过了一段时间就不工作了

4ngedf3f  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(125)

我在TensorFlow Hub上从mobilenetv 2模型创建了一个模型,我使用model.save()来保存模型,并用途:

my_reloaded_model = tf.keras.models.load_model(
       ("./model/model_flower.h5"),
       custom_objects={'KerasLayer':hub.KerasLayer}
)

加载模型。
我的程序工作正常,但大约一周后,当我再次运行该程序时,它会生成如下错误:
TypeError:使用config=“name”反序列化类“KerasLayer”时出错:'keras_layer_1',' trainable':False,'dtype':'float32','batch_input_shape':[None,224,224,3],'handle':'https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4'}.
遇到异常:试图加载不兼容/未知类型的模型。“C:\Users\Lenovo\AppData\Local\Temp\tfhub_modules\145bb06ec3b59b08fb564ab752bd5aa222bfb50a”既不包含“saved_model.pb”也不包含“saved_model. pbtxt”。
我检查了堆栈溢出,得到了one result
从本质上讲,我从上面的文章中了解到,TensorFlow将创建一个临时目录来保存加载的模型;但是,几天后,文件夹的内容(加载的模型)将被删除。然后,当您再次加载模型时,TensorFlow将路由到临时目录,但模型将从临时目录中删除。
这是有道理的,并解释了为什么如果您的代码在过去几天运行得非常好,然后突然出现此错误,则可能与删除旧的临时目录有关。
我删除了临时文件夹,并再次运行它,它工作正常。但这只是一个临时的解决方案,该程序仍然停止工作,每1个星期左右。我不想每隔一段时间就删除那个临时文件夹。
你有什么解决办法吗?
我希望我的程序能工作很长一段时间,而不是每次都要修复它。

zxlwwiss

zxlwwiss1#

经过大约几天的静坐和阅读文档,我现在有了一个解决方案(虽然不是很好,但基本上足以解决我的问题,任何有更好答案的人都欢迎,任何没有解决方案的人都可以参考我的方式)
这里的问题是,我的程序在训练时使用迁移学习方法,并使用keras层作为原始部分(没有更改),只编辑最后一层(输出层)。因此,当您保存模型时,程序将仅保存您编辑的部分(输出层)。所以当你想加载模型时,你还需要一个keras层,使原始层与输出层(你自己编辑的层)结合成一个完整的模型。Keras层加载了一个包含模型权重和结构的临时模型(该文件夹不会持续很长时间-导致在测试一段时间后出现错误,需要删除才能运行)。间隔3或4天后再次进行)。我的方法是在问题发生之前解决它。而不是使用keras层作为背景层(层不会改变),我下载了keras层作为训练的原材料,即训练过程中会改变一点keras层。用途:从tensorflow.keras.applications导入“你想要使用的库”,并像往常一样训练,以拥有一个可以作为自建模型保存和加载的模型。然而,这种方式可能需要更多的计算资源,模型的大小也会更大(例如远程使用keras层的模型,它将给予大约10 mb的模型,但如果通过如何下载使用keras层,模型将大约45 mb)。我参考这篇文章来做新的方式:https://saturncloud.io/blog/proper-way-to-save-transfer-learning-models-in-keras/

相关问题