Я пытаюсь создать модель Tensorflow в Keras, инициализировать ее, а затем сохранить, чтобы потом использовать в 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, которые позволяют сохранять график, некоторые переменные и набор сигнатур, чтобы ваш код C ++ мог знать, какие значения передать в session.run для прохождения обучения. работать.
Других решений пока нет …