我在以下链接中尝试过keras nmt代码:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/nmt_with_attention/nmt_with_attention.ipynb
但是当我尝试保存模型时,出现了NotImplementedError:
File "m.py", line 310, in <module>
main()
File "m.py", line 244, in main
encoder.save('/home/zzj/temp/encoder.h5')
File "/home/zzj/tensorflow/lib/python3.5/site-packages/tensorflow/python/keras/engine/network.py", line 1218, in save
raise NotImplementedError
编码器,解码器将tf.keras.Model子类化,而tf.keras.Model是Network的子类。阅读https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/keras/engine/network.py
中的代码后我发现这两个类的_is_graph_network变为False。我试图将标志设置为true,但出现另一个错误。那么如何保存作者在代码中定义的模型?
答案 0 :(得分:1)
当前的tf版本(1.11)也有类似的问题。我使用tf.keras API定义了我的模型,并对其进行了毫无问题的训练。当我想使用tensorflow.keras.models.save_model
或model.save()
(仅调用save_model)保存模型时,出现以下异常:
NotImplementedError:__deepcopy __()仅在启用急切执行时可用。
所以我叫tf.enable_eager_execution()
,但是由于在我的体系结构中使用了Lambda层,我最终遇到了另一个 NotImplementedError 。如果您的体系结构不包含Lambda层,则启用eager_execution可以解决tf 1.11中的问题。
我最后的“前进方向”是使用model.save_weights('model_weights.h5')
,因为我不需要保存模型体系结构,而只是训练了权重。
顺便说一句:在我的情况下,也可以从tensorflow.keras。*导入转换为keras。*,而仅使用带有tf后端的“普通” keras(当然,model.save()
可以使用)。
答案 1 :(得分:0)
考虑使用tf.keras.models.save_model()和load_model(),它可能会起作用。
答案 2 :(得分:0)
model.save('model.h5py')
可以解决问题。关键是另存为h5py文件。