gpt4 book ai didi

scope - 如何在同一个图中使用由不同容器管理的两个具有相同名称的 TensorFlow 变量?

转载 作者:行者123 更新时间:2023-12-05 07:47:49 25 4
gpt4 key购买 nike

我在构建和运行包含存储在不同容器中的变量的图形时没有问题,但我找不到使用恰好具有相同名称的两个不同变量的方法,因为 TensorFlow 通过添加一个自动重命名第二个变量定义_1 后缀。

比如我先在容器"a"中初始化一个名为"x"的变量:

import tensorflow as tf

with tf.container("a"):
xa = tf.Variable(1.0, name="x")

with tf.Session("grpc://localhost:2222") as sess:
sess.run(xa.initializer)

然后我在容器 "b" 中初始化另一个名为 "x" 的变量:

tf.reset_default_graph()

with tf.container("b"):
xb = tf.Variable(2.0, name="x")

with tf.Session("grpc://localhost:2222") as sess:
sess.run(xb.initializer)

现在我想在一个新图中使用这两个变量:

tf.reset_default_graph()

with tf.container("a"):
xa = tf.Variable(0.0, name="x")

with tf.container("b"):
xb = tf.Variable(0.0, name="x") # renamed to x_1!

z = xa + xb

with tf.Session("grpc://localhost:2222") as sess:
print(z.eval())

但 TensorFlow 会自动将第二个变量重命名为 x_1,因此当我运行这段代码时,我收到一条错误消息,告诉我 x_1 未初始化。

注意:如果变量的名称不同,则一切正常,因此一个快速的解决方法是重命名其中一个变量,但似乎应该有办法做到这一点,因为这些变量确实不同,除了为了他们的名字。

编辑

对于队列,解决方案很简单,因为它们有一个不同于 name 属性的 shared_name 属性,所以你可以这样写:

import tensorflow as tf

with tf.container("a"):
xa = tf.FIFOQueue(..., name="xa", shared_name="x")

with tf.container("b"):
xb = tf.FIFOQueue(..., name="xb", shared_name="x")

但是变量似乎没有shared_name属性。

最佳答案

图表中不能有两个同名的变量。

我认为解决方案是创建两个图和两个指向同一远程端点的远程 session 。

import tensorflow as tf


g_1 = tf.Graph()
with g_1.as_default():
c = tf.constant("Node in g_1")
with tf.container("a"):
x1 = tf.Variable(0.0, name="x")
init1 = tf.global_variables_initializer()

g_2 = tf.Graph()
with g_2.as_default():
d = tf.constant("Node in g_2")
with tf.container("a"):
x2 = tf.Variable(0.0, name="x")
init2 = tf.global_variables_initializer()

server = tf.train.Server.create_local_server()
print server.target
sess_1 = tf.Session(server.target, graph=g_1)
sess_2 = tf.Session(server.target, graph=g_2)

assert c.graph is g_1
assert sess_1.graph is g_1

assert d.graph is g_2
assert sess_2.graph is g_2

print sess_1.run([init1, c])
print sess_1.run([x1])
print sess_2.run([x2])

可以看到x2已经初始化了。

注意:必须使用远程 session 才能使其工作。

引用:

Graphs and Sessions

Distributed TensorFlow

关于scope - 如何在同一个图中使用由不同容器管理的两个具有相同名称的 TensorFlow 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39193012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com