Tensorflow名称范围

时间:2018-07-05 14:32:21

标签: python tensorflow neural-network deep-learning

做类似事情的目的是什么

 with tf.name_scope('Layer1') as n1:
    w = tf.Variable(tf.truncated_normal((50*50, 120), mean=0, stddev=0.01))
    b = tf.Variable(tf.zeros([120]))
    o = tf.nn.relu(tf.matmul(X, w)+b)

我想这是为了提高可读性,以便您可以在代码块(name_scope)之外重用变量名,而不会产生更深远的有意义的后果。

我什么时候使用它,有什么合适的方案?为了让tensorflow练习者经常使用name_score?

还可以有人给我一个示例,说明sess.graph.get_tensor_by_name()name_scope的上下文中如何工作吗?

2 个答案:

答案 0 :(得分:1)

因此,它的名称范围当然可以在代码中用于可读性。但它也可用于获取保存在图形中的张量的名称。例如,当您尝试在Tensorboard中表示数据或通过名称获取张量时,这非常有用!

答案 1 :(得分:0)

Namescope用于将操作划分为它们的范围,以易于阅读和提取。例如,您的ResNet具有不同的残差层,或者Inception具有不同的Inception层,则可以使用名称范围将这些层进行分组,例如ResLayer1,ResLayer2或InceptionLayer1,InceptionLayer2,在不同范围内创建相同的图层。

此外,在加载模型时,可以通过填充图形节点,然后按正确的标号为每一层查找相关节点,从而轻松提取操作和张量。例如您训练了模型,然后将训练有素的'.pb'模型文件发送给我以进行部署,我不知道输入或输出节点是什么。但是,如果您已使用Namescope正确标记,则可以填充您的图形并查看其名称,并轻松运行该图形。我也可以用它访问不同的输出层。

@Ignacio Peletier提到的另一件事,当使用TensorBoard时,可视化的图形根据名称范围进行分组,从而可以轻松查看图形。