Tensorflow 连接张量流图中变量的初始化

Tensorflow 连接张量流图中变量的初始化,tensorflow,tensorflow-serving,Tensorflow,Tensorflow Serving,我正在尝试将几个单独图形上的Tensorflow模型连接到单个图形上的单个模型中(我想象典型场景是需要冻结的迁移学习模型、集合等) 我可以使用tf.import_graph_def连接这两个图形。但是,当其中一个原始图形包含变量时,我无法在新图形上向其中注入值。分配操作作为图形的一部分被复制,如果我手动运行这些操作,就会得到预期的结果。(使用graph…-块取消注释第四个中的sess.run-调用) 按原样运行此代码段将产生: FailedPreconditionError (see above

我正在尝试将几个单独图形上的Tensorflow模型连接到单个图形上的单个模型中(我想象典型场景是需要冻结的迁移学习模型、集合等)

我可以使用tf.import_graph_def连接这两个图形。但是,当其中一个原始图形包含变量时,我无法在新图形上向其中注入值。分配操作作为图形的一部分被复制,如果我手动运行这些操作,就会得到预期的结果。(使用graph…-块取消注释第四个
中的
sess.run
-调用)

按原样运行此代码段将产生:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value graph1/var1
手动运行AssignOps是一种非常小的通用方法,作为通用函数的一部分编写起来会很麻烦。它还要求每次使用图形重新初始化会话时都进行这些assign调用

有没有更通用的方法?例如,通过在旧变量的基础上创建新变量并将其锁定到现有结构上


如果没有,是否有办法包装assign呼叫?因此,至少我可以为每种情况运行一个常规init操作,而不是未知数量的特定init操作?

通过创建init包装器修复了这一问题。对于名称以“Apply:(int)”结尾的所有张量,我使用tf.reduce_sum(标准化它们的形状)并将它们插入tf.stack。这个init操作在内部被视为noop,但它确保传递给它的每个张量都被运行(从而也初始化了相应的变量)。从语义上讲,它可以被视为tf.global\u variables\u initializer()


虽然不是最优雅的解决方案,但它目前仍适用于我的用例。

我将不胜感激!如果你能分享你最后的密码会更好
FailedPreconditionError (see above for traceback): Attempting to use uninitialized value graph1/var1