keras model.save()引发NotImplementedError

时间:2018-07-28 02:44:32

标签: python tensorflow keras

我在以下链接中尝试过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,但出现另一个错误。那么如何保存作者在代码中定义的模型?

3 个答案:

答案 0 :(得分:1)

当前的tf版本(1.11)也有类似的问题。我使用tf.keras API定义了我的模型,并对其进行了毫无问题的训练。当我想使用tensorflow.keras.models.save_modelmodel.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文件。