我正在尝试在 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 的值获得工作培训。
关于python - 从 Keras 保存初始化的 tensorflow 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50362045/