こんにちは。Kerasを使っていて詰まったことがあったので備忘録代わりに投稿します。
エラーの内容
Kerasのモデルをmodel.save("my_model")
によって保存しようとしたところ、以下のエラーが出た。
TypeError: cannot pickle '_thread.RLock' object
エラーの原因
私が保存しようとしていたmodelにLambdaレイヤが含まれていたため、pickle化ができないということのようだった。
一つの解決策
model.save("my_model")
としたときにはmodelの構造と重みが共に保存されるが、上記の問題によりLambdaレイヤが含まれているモデルの構造は保存できない。そこでmodel.save_weights("my_model.h5")
によってまず重みのみを保存する。次にこの重みをどう用いるかだが、モデルの構造を再構築することはコーディングによって可能なはずなので、手動でモデルの構造を書き下し、その後reconstructed_model.load_weights("my_model.h5")
とすればよい。
以上です。より良い解決策などあれば教えて下さい。
参考文献
https://deecode.net/?p=975
https://blog.paperspace.com/working-with-the-lambda-layer-in-keras/