gpt4 book ai didi

python - tensorflow 中不同范围的子网权重共享

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:59 26 4
gpt4 key购买 nike

使用 tensorflow,我试图在不同变量范围内共享来自相同网络的相同权重以节省内存。但是,似乎没有简单的方法可以做到这一点。我准备了一个小代码示例,以在较小的规模上说明我想对较大的子网执行的操作:

import tensorflow as tf

graph = tf.Graph()
with graph.as_default():
with tf.variable_scope("super_scope_one"):
scope1 = tf.variable_scope("sub_scope_one")
with scope1:
number_one = tf.get_variable("number_one", shape=[1],
initializer=tf.ones_initializer)
with tf.variable_scope("super_scope_two"):
with tf.variable_scope("sub_scope_one", reuse=True) as scope2:
# Here is the problem.
# scope1.reuse_variables() # this crashes too if reuse=None.
number_one = tf.get_variable("number_one", shape=[1])
with tf.variable_scope("sub_scope_two"):
number_two = tf.get_variable("number_two", shape=[1],
initializer=tf.ones_initializer)
number_three = number_one + number_two

init_op = tf.global_variables_initializer()

with tf.Session(graph=graph):
init_op.run()
print(number_three.eval())

有没有办法在不删除的情况下共享两个子作用域中的变量上面的范围?如果不是,是否有充分的理由说明这将是一个坏主意?

最佳答案

您可以在 "super_scope_one" 中简单地定义一次 number_one 并在 "super_scope_two" 中使用它。

不同作用域的两个变量可以一起使用。见下文:

import tensorflow as tf

graph = tf.Graph()
with graph.as_default():
with tf.variable_scope("super_scope_one"):
scope1 = tf.variable_scope("sub_scope_one")
with scope1:
number_one = tf.get_variable("number_one", shape=[1],
initializer=tf.ones_initializer)
with tf.variable_scope("super_scope_two"):
with tf.variable_scope("sub_scope_two"):
number_two = tf.get_variable("number_two", shape=[1],
initializer=tf.ones_initializer)
number_three = number_one + number_two

init_op = tf.global_variables_initializer()

with tf.Session(graph=graph):
init_op.run()
print(number_three.eval())

返回 [2]

关于python - tensorflow 中不同范围的子网权重共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46585245/

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