tensorflow变量命名空间与可视化

variable_scope

  • 使用tf.variable_scope定义的命名空间,只要空间名称不同,定义的变量互不干挠,即使函数name参数相同
  • 如果是在相同命名空间下,

如果是不可重用的(reuse=False),tf. get_variable函数会查找在当前命名空间下是否存在由tf.get_variable定义的同名变量(而不是tf.Variable定义的),如果不存在,则新建对象,否则会报错

如果是可重用的(reuse=True),如果存在,则会返回之前的对象,否则报错,

tf. Variable不管在什么情况下都是创建新变量,自己解决命名冲突

下面举个例子说明

import tensorflow as tf
from tensorflow.python.framework import ops
ops.reset_default_graph()
sess = tf.InteractiveSession()
with tf.variable_scope("scope1"):
    w1 = tf.get_variable("w1", initializer=4.)
    w2 = tf.Variable(0.0, name="w2")
with tf.variable_scope("scope2"):
    w1_p = tf.get_variable("w1", initializer=5.)
    w2_p = tf.Variable(1.0, name="w2")
with tf.variable_scope("scope1", reuse=True):
    w1_reuse = tf.get_variable("w1")
    w2_reuse = tf.Variable(1.0, name="w2")

def compare_var(var1, var2):
    print '-----------------'
    if var1 is var2:
        print sess.run(var2)
    print var1.name, var2.name
sess.run(tf.global_variables_initializer())

compare_var(w1, w1_p)
compare_var(w2, w2_p)
compare_var(w1, w1_reuse)
compare_var(w2, w2_reuse)

name_scope

  • 使用name_scope命名空间

get_variable不受name_scope命名空间约束

Variable受命名空间约束,但可以自己解决冲突

import tensorflow as tf
from tensorflow.python.framework import ops
ops.reset_default_graph()
sess = tf.InteractiveSession()

with tf.name_scope("scope1"):
    w1 = tf.Variable(0.0, name="w1")
    w2 = tf.get_variable("w2", initializer=4.)
with tf.name_scope("scope1"):
    w1_p = tf.Variable(1.0, name="w1")

    w2_p = tf.get_variable("w1", initializer=5.)

def compare_var(var1, var2):
    print '-----------------'
    if var1 is var2:
        print sess.run(var2)
    print var1.name, var2.name
    print '-----------'
sess.run(tf.global_variables_initializer())

compare_var(w1, w2)
compare_var(w1_p, w2_p)

总结两个命名空间的作用不同

variable_scope与get_variable搭配使用可以使得共享变量 name_scope主要用来tensorboard可视化

tensorboard可视化

import tensorflow as tf
from tensorflow.python.framework import ops
ops.reset_default_graph()
sess = tf.InteractiveSession()
log_dir = '../datachuli'
def practice_num():
# 练习1: 构建简单的计算图
    input1 = tf.constant([1.0, 2.0, 3.0],name="input1")
    input2 = tf.Variable(tf.random_uniform([3]),name="input2")
    output = tf.add_n([input1,input2],name = "add")

    sess.run(tf.global_variables_initializer())
    sess.run(output)
#生成一个写日志的writer,并将当前的tensorflow计算图写入日志
    writer = tf.summary.FileWriter(log_dir + "/log",tf.get_default_graph())
    writer.close()
    
practice_num()
  • 加入命名空间,tensorboard可视化将非常有层次感,更清晰
ops.reset_default_graph()
sess = tf.InteractiveSession()

def practice_num_modify():
    #将输入定义放入各自的命名空间中,从而使得tensorboard可以根据命名空间来整理可视化效果图上的节点
    # 练习1: 构建简单的计算图
    with tf.name_scope("input1"):
        input1 = tf.constant([1.0, 2.0, 3.0],name="input1")
    with tf.name_scope("input2"):
        input2 = tf.Variable(tf.random_uniform([3]),name="input2")
    with tf.name_scope('add1'):
        output = tf.add_n([input1,input2],name = "add")
    sess.run(tf.global_variables_initializer())
    sess.run(output)

#生成一个写日志的writer,并将当前的tensorflow计算图写入日志
    writer = tf.summary.FileWriter(log_dir + "/log_namescope",tf.get_default_graph())
    writer.close()
practice_num_modify()

可以点击add1和input2右上角+号展开

展开前

展开后

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码云1024

Tensorflow 搭建神经网络 (一)

本文为中国大学MOOC课程《人工智能实践:Tensorflow笔记》的笔记中搭建神经网络,总结搭建八股的部分

653150
来自专栏java初学

MD5算法

20540
来自专栏深度学习之tensorflow实战篇

R常用基本 函数汇总整理

help() 或者 ? + command 这是学习和使用R最常用到的命令。 help.search() 或者?? 搜索包含制定字串或pattern的...

34930
来自专栏帮你学MatLab

《Experiment with MATLAB》读书笔记(二)

读书笔记(二) 这是第二部分函数与绘图 将代码复制到m文件即可运行 函数部分需新建m文件保存 %% 函数 % 变量在用之前先赋0站位 % 计数或者...

30970
来自专栏雨过天晴

原 Hash一致性算法实现

16830
来自专栏AI研习社

Github 项目推荐 | 用 tf * idf 计算文本之间的相似度

该库是具有 tf * idf 权重的 Ruby 向量空间模型(VSM),它能够用 tf * idf 计算文本之间的相似度。

14540
来自专栏xingoo, 一个梦想做发明家的程序员

剑指OFFER之矩形覆盖(九度OJ1390)

题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 输入: 输入可能包...

20360
来自专栏深度学习那些事儿

pytorch中retain_graph参数的作用

在pytorch神经网络迁移的官方教程中有这样一个损失层函数(具体看这里提供0.3.0版中文链接:https://oldpan.me/archives/pyto...

86140
来自专栏AzMark

Matplotlib 系列之「Legend 图例」

Matplotlib 的 Legend 图例就是为了帮助我们展示每个数据对应的图像名称,更好的让读者认识到你的数据结构。

9210
来自专栏性能与架构

算法中描述复杂度的大O是什么意思?

简介 算法是解决问题的方法,通常一个问题会有多种解决方法,就是有多种算法,那么我们如何决定哪个算法更好或者更高效呢? 为了描述一个算法的效率,就用到了这个大O,...

34750

扫码关注云+社区

领取腾讯云代金券