【问题标题】:Keras-CNTK saving model-v2 formatKeras-CNTK 保存模型-v2 格式
【发布时间】:2017-06-06 15:34:28
【问题描述】:

我使用 CNTK 作为 Keras 的后端。我正在尝试使用我在 C++ 中使用 Keras 训练过的模型。

我已经使用 HDF5 中的 Keras 训练并保存了我的模型。我现在如何使用 CNTK API 将其保存为 model-v2 格式?

我试过了:

model = load_model('model2.h5')
cntk.ops.functions.Function.save(model, 'CNTK_model2.pb')

但我收到以下错误:

TypeError: save() missing 1 required positional argument: 'filename'

如果 tensorflow 是后端,我会这样做:

model = load_model('model2.h5')
sess = K.get_session()
tf_saver = tf.train.Saver()
tf_saver.save(sess=sess, save_path=checkpoint_path)

我怎样才能达到同样的目的?

【问题讨论】:

    标签: keras cntk


    【解决方案1】:

    根据 cmets here,我可以使用这个:

    import cntk as C
    import keras.backend as K
    
    keras_model = K.load_model('my_keras_model.h5')
    
    C.combine(keras_model.model.outputs).save('my_cntk_model')
    cntk_model = C.load_model('my_cntk_model')
    

    【讨论】:

      【解决方案2】:

      你可以这样做 model.outputs[0].save('CNTK_model2.pb') 我假设您在这里调用了 model.compile (即这是我尝试过的唯一情况:-)

      【讨论】:

      • 我厌倦了@nikosk:- model=load_model('model2.h5') model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.outputs[0].save('CNTK_model2.pb') 但是在加载模型时:- C.load_model('CNTK_model2.pb') 我收到以下错误:- if is_file: return cntk_py.Function.load(model, device) raise ValueError('Cannot load a model that is neither a file nor a byte buffer.') RuntimeError: SWIG director method error.
      【解决方案3】:

      您看到此错误的原因是因为 keras 的 cntk 后端使用用户定义的函数在批处理轴上进行 reshape,无法序列化。我们已在 CNTK v2.2 中修复了此问题。请将您的cntk 升级到v2.2,并将keras 升级到最后一个master。 请参阅此拉取请求: https://github.com/fchollet/keras/pull/7907

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 2019-01-26
        • 2018-03-11
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        相关资源
        最近更新 更多