ハードウェア技術者のスキルアップ日誌

某家電メーカーの技術者がスキルアップのために勉強したことを記録するブログです

Keras/Tensorflow - h5/hdf5からckptへの変換方法

以前、ckptからpbへの変換方法をブログに書きましたが、今回はKerasのh5/hdf5形式からckptへ変換する方法を調べましたので、ここにメモしておきます。

masaeng.hatenablog.com

 

変換方法

私の環境でうまくいったサンプルコードです。

from keras import backend as K
from keras.models import load_model
import tensorflow as tf

K.clear_session()
K.set_learning_phase(0)

model = keras.models.load_model("xxx.h5")
sess = keras.backend.get_session()

saver = tf.train.Saver()
save_path = saver.save(sess, "xxxx.ckpt")

上のリンクのckptからpbへ変換する方法と組み合わせるとh5/hdf5形式からpb形式に変換することができます。

また、こちらの手法では直接h5/hdf5からpbに変換することができます。
1回で済むのでこちらの方が手軽かもしれません。

from keras import backend as K
from keras.models import load_model
import tensorflow as tf

def freeze_session(session, keep_var_names=None, output_names=None, clear_devices=True):

    from tensorflow.python.framework.graph_util import convert_variables_to_constants
    graph = session.graph
    with graph.as_default():
        freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or []))
        output_names = output_names or []
        output_names += [v.op.name for v in tf.global_variables()]
        # Graph -> GraphDef ProtoBuf
        input_graph_def = graph.as_graph_def()
        if clear_devices:
            for node in input_graph_def.node:
                node.device = ""
        frozen_graph = convert_variables_to_constants(session, input_graph_def,
                                                    output_names, freeze_var_names)
        return frozen_graph


def main():
    model = load_model('xxx.h5')
    frozen_graph = freeze_session(K.get_session(),
                            output_names=[out.op.name for out in model.outputs])

    # Save pb file
    tf.train.write_graph(frozen_graph, "SAVE_PATH", "xxxx.pb", as_text=False)

if __name__ == '__main__':
    main()

 

参考サイト

https://stackoverflow.com/questions/52650842/how-to-convert-hdf5-to-tensorflow-checkpoint

https://www.dlology.com/blog/how-to-convert-trained-keras-model-to-tensorflow-and-make-prediction/