从 Keras 保存初始化的张量流图

Save initialized tensorflow graph from Keras

本文关键字:张量流 初始化 Keras 保存      更新时间:2023-10-16

我正在尝试在 Keras 中创建一个 Tensorflow 模型,对其进行初始化,然后保存它,以便以后可以在C++中使用它。我不想用 Keras 训练它,因为我在C++中有一个我想使用的自定义训练方法。

我试图用:

def reset_weights(model):
session = K.get_session()
for layer in model.layers:
if hasattr(layer, 'kernel_initializer'):
layer.kernel.initializer.run(session=session)

inputs = Input(shape=(2,), name="inputs")
hidden_l = Dense(5, activation='relu', name="hidden_1", kernel_initializer="glorot_normal")(inputs)
hidden_l = LeakyReLU(alpha=0.3, name="hidden_leakyrelu_1")(hidden_l)
outputs = Dense(2, activation='softmax', name="outputs", kernel_initializer="glorot_normal")(hidden_l)
model = Model(inputs=inputs, outputs=outputs)
reset_weights(model)
K.set_learning_phase(0)
sess = K.get_session()
f = "graph_def_for_reference.pb.ascii"
tf.train.write_graph(sess.graph.as_graph_def(), "./", f, as_text=True)

但是graph_def_for_reference.pb.ascii文件似乎仍然包含一堆初始化节点,而不仅仅是图形结构。

如何运行初始化并保存图形和初始化的权重,以便我可以将它们加载到 TensorFlow C++中?

TF 图包含各种节点,这些节点永远不会在对 session.run 的单次调用中执行。初始化节点将始终存在,但您不必运行它们。

但是,要做你想做的事情,我建议你查看 tf savedmodel 库,它允许你保存一个图形、一些变量和一组签名,以便你的C++代码可以知道要传递给 session.run 的值以使训练工作。