AttributeError:无法腌制本地对象。如何解决这个问题?

AttributeError: Can't pickle local object. How to fix this issue?

提问人:Sid R. 提问时间:11/14/2023 更新时间:11/14/2023 访问量:34

问:

我正在尝试保存 BERT 模型,但出现以下错误。我已经尝试使用model.save(),但这给了我另一个错误,所以我正在尝试寻找解决方法。

这是我用来保存模型的代码

tf.saved_model.save(bert_tf, 'my_model3')

loaded_model = tf.saved_model.load('my_model3')

with open('model_pickle.pkl', 'wb') as f:
    pickle.dump(loaded_model, f)

这是错误消息:

AttributeError                            Traceback (most recent call last)
Cell In[89], line 6
      3 loaded_model = tf.saved_model.load('my_model3')
      5 with open('model_pickle.pkl', 'wb') as f:
----> 6     pickle.dump(loaded_model, f)

AttributeError: Can't pickle local object 'Loader._recreate_base_user_object.<locals>._UserObject'

作为参考,这是我正在使用的源笔记本(除了添加开头和上面的代码外,我没有更改任何内容): https://www.kaggle.com/code/amirhoseinsedaghati/sentiment-analysis-on-reviews-mchcnn-bert-textblobfrom tensorflow import keras

谁能给我一些支持?

python bert-language-model kaggle

评论


答:

0赞 Antonio Bejar 11/14/2023 #1

如果我没记错的话,由于兼容性问题,TensorFlow 模型不能直接使用“pickle”进行酸洗。

您应该使用 TensorFlow 的内置方法来保存和加载模型,而不是使用 pickle。

尝试:

保存模型:

tf.saved_model.save(bert_tf, 'my_model3')

加载模型:

loaded_model = tf.saved_model.load('my_model3')

评论

0赞 Sid R. 11/14/2023
我想保存模型并将其加载到 Kaggle 上的另一个笔记本中。这种方法仍然有效吗?
0赞 Antonio Bejar 11/14/2023
它应该可以工作,如果它不适合您,您可以尝试像“bert_tf.save('my_model3', save_format='tf')”一样保存您的模型,然后像“loaded_model = tf.keras.models.load_model('my_model3')”一样加载。我希望它能解决你的问题。