如何将经过TF训练的网络导出到H5文件

时间:2020-05-10 19:51:24

标签: matlab tensorflow

我有一个训练有素的模型,该模型保存在3个文件中,并使用一些tensorflow(1.x)代码行。 为了将其导入到Matlab中,我需要将模型转换为.h5(keras)。

模型保存为3个文件:

  • xxx.ckpt.data-00000-of-00001
  • xxx.ckpt.index
  • xxx.ckpt.meta

张量流代码行如下:

zzz = "a function of the previous line"
session_name = "a function of xxx"
sess = tf.Session()  
saver = tf.train.Saver()
saver.restore(sess,session_name)
output=sess.run(zzz, ...)

是否可以将经过培训的网络导出到H5文件? 如果是,该怎么办?

添加:我已经问过一个朋友,显然不可能直接这样做是因为,首先,我必须“翻译” Keras中的网络结构。对于我在域中的级别而言,此步骤太难了。

1 个答案:

答案 0 :(得分:0)

据我所知,目前尚无方法直接使用检查点文件并秘密隐藏到h5(keras)。取而代之的是,您可以通过执行以下一些较小的解决方法来实现此目的。

  1. 如果要使用网络体系结构,则需要用Keras重写代码。
  2. 如果您只想转换权重(假设您具有相同模型的代码),则必须创建一个具有随机权重的模型,然后使用TensorFlow .ckpt读取tf.train.NewCheckpointReader文件,然后调用{{1 }}方法用于每个对应的层。

下面提到的相同示例代码:

set_weights()

您可以使用保存的.npy文件在h5(keras)中输出模型权重,如下所示。

reader = tf.train.NewCheckpointReader(filename)

for key in reader.get_variable_to_shape_map():
    # not saving the following tensors
    if key == 'global_step':
        continue
    if 'AuxLogit' in key:
        continue

    # convert tensor name into the corresponding Keras layer weight name and save
    path = os.path.join(output_folder, get_filename(key))
    arr = reader.get_tensor(key)
    np.save(path, arr)