Skip to main content
 首页 » 编程设计

python之为什么我需要 "as_default() "才能在 Tensorflow 图中编写指令

2024年11月24日26Terrylee

为什么我不能直接使用 g1,g2 而不将其设置为默认值?

为什么我必须使用 with g1.as_default() as g:

g1 = tf.Graph() 
g2 = tf.Graph() 
with g1.as_default() as g: 
  with g.name_scope( "g1" ) as g1_scope: 
    matrix1 = tf.constant([[3., 3.]]) 
    matrix2 = tf.constant([[2.],[2.]]) 
    product = tf.matmul( matrix1, matrix2, name = "product") 

请您参考如下方法:

除非您处于急切模式,否则每次您创建新操作(或多或少任何 tf.* 函数)时,都会将一个新节点添加到 TensorFlow 计算图中。如果您没有另外指定,该图将是“默认图”,即 TensorFlow 默认为您创建的图(您可以使用 tf.reset_default_graph() 更新默认图)。然而,如果你想让事情更整洁,你可能想要对哪个操作在哪个图中进行一些控制。为此,您可以创建自己的图形并使用 as_default() 上下文。这将使给定的图形成为默认图形,因此每个新操作现在都将添加到该图形而不是全局默认图形。通常,这是指定每个操作的位置的唯一方法。例如,这允许您在不同的图形中保留不同的模型,这可能使保存和恢复更容易,或者只是保持隔离(注意每个 session 属于一个图形,因此一个图形中的计算不可能影响不同的图形)图)。