从 Keras 保存初始化的张量流图
Save initialized tensorflow graph from Keras
我正在尝试在 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 的值以使训练工作。
相关文章:
- C++中的张量流对象检测
- 在官方张量流 resnet50 模型上运行 tflite 精度工具
- 如何使用 c++ 更改张量流中的per_process_gpu_memory_fraction?
- C++ 字符串流初始化
- 编译 GPU 的张量流示例自定义操作
- C++ ABI 兼容性问题/张量流
- 如何从内存缓冲区加载张量流图
- 张量流错误 此文件需要编译器和库支持 ISO C++ 2011 标准
- 部署在张量流中训练的神经网络来火炬C++的最佳方法是什么?
- 微调张量流对象检测预训练模型
- 添加 OP 张量流调试
- 如何通过一次运行将多个输入样本馈送到C++张量流模型
- 未定义的符号'fixed_address_empty_string':带有protobuf的新张量流运算
- F 张量流/核心/common_runtime/device_factory.cc:77]具有相同优先级 210 的 G
- 张量流 c++ API 是否支持反向传播的自动微分?
- 最小工作示例张量流服务客户端
- 从 Eigen::Tensor 创建张量流::张量
- 如何访问张量流::张量C++
- 从 Keras 保存初始化的张量流图
- 如何在张量流上使用 fp16(Eigen::half) 进行卷积