Keras 的 BatchNormalization 层中的 Moving_mean 和 Moving_variance
Moving_mean and Moving_variance in BatchNormalization layer of Keras
我想将一组预训练的权重从 Tensorflow 导出到 Keras。
问题在于 Tensorflow 中的批量归一化层仅嵌入 Beta 和 Gamma 作为可训练的权重,而在 Keras 中,我们也有 Moving_mean 和 Moving_variance。
我很困惑从哪里获得这些权重。
尝试tf.train.NewCheckpointReader
。我最近将 CNN 模型从 TF 转换为 Keras,导出移动 mean/variance 权重没有问题。
reader = tf.train.NewCheckpointReader(ckpt_file)
for key in reader.get_variable_to_shape_map():
path = os.path.join(output_folder, get_filename(key))
arr = reader.get_tensor(key)
np.save(path, arr)
print("tensor_name: ", key)
其中 get_filename()
只是一个将张量名称转换为正确文件名的函数。 (例如,用下划线替换斜线)
如果您对更多详细信息感兴趣,full code 可能会对您有所帮助。
我想将一组预训练的权重从 Tensorflow 导出到 Keras。 问题在于 Tensorflow 中的批量归一化层仅嵌入 Beta 和 Gamma 作为可训练的权重,而在 Keras 中,我们也有 Moving_mean 和 Moving_variance。 我很困惑从哪里获得这些权重。
尝试tf.train.NewCheckpointReader
。我最近将 CNN 模型从 TF 转换为 Keras,导出移动 mean/variance 权重没有问题。
reader = tf.train.NewCheckpointReader(ckpt_file)
for key in reader.get_variable_to_shape_map():
path = os.path.join(output_folder, get_filename(key))
arr = reader.get_tensor(key)
np.save(path, arr)
print("tensor_name: ", key)
其中 get_filename()
只是一个将张量名称转换为正确文件名的函数。 (例如,用下划线替换斜线)
如果您对更多详细信息感兴趣,full code 可能会对您有所帮助。