美文网首页TensorflowTensorflow
学习笔记TF006:Variable对象、名称作用域

学习笔记TF006:Variable对象、名称作用域

作者: 利炳根 | 来源:发表于2017-05-12 02:16 被阅读124次

Tensor、Op对象不可变(immutable)。.Variable()构造方法创建Variable对象,包含Session.run()调用中可持久化的可变张量值。Variable对象初值通常为全0、全1或用随机数填充阶数较高张量,创建初值张量Op,.zeros()、.ones()、.random_normal()、.random_uniform(),接收shape参数。

Graph管理Tensor对象,Session管理Variable对象。Variable对象必须在Session对象内初始化。初始化所有Variable对象,把.global_variables_initializer() Op传给Session.run()。初始化部分Variable对象,把.variables_initializer() Op传给Session.run()。Variable.assign()Op,修改Variable对象,必须在Session对象中运行。.assign_add()创建自增Op,.assign_sub()创建自减Op。不同Session对象独立维护在Graph对象定义的Variable对象值。Optimizer类自动训练机器学习模型,自动修改Variable对象值。创建Variable对象时trainable参数设False,只允许手工修改值。

import tensorflow as tf

my_var = tf.Variable(3, name="my_variable")#创建Variable对象
add = tf.add(5, my_var)
mul = tf.multiply(8, my_var)
zeros = tf.zeros([2, 2])#零矩阵
ones = tf.ones([6])#全1向量
uniform = tf.random_uniform([3,3,3], minval=0, maxval=10)#三维张量,元素服从0~10均匀分布
normal = tf.random_normal([3,3,3], mean=0.0, stddev=2.0)#三维张量,元素服从0均值,标准差为2正态分布
trunc = tf.truncated_normal([2,2], mean=5.0, stddev=1.0)#不会返回小于3.0或大于7.0的张量
radom_var = tf.Variable(tf.truncated_normal([2,2]))#默认值0,默认标准差1.0
init_global = tf.global_variables_initializer()#所有Varialbe对象初始化
sess = tf.Session()
sess.run(init_global)
sess.run(add)

var1 = tf.Variable(1, name="initialize_me")
var2 = tf.Variable(2, name="no_initialize")
init_part = tf.variables_initializer([var1], name="initialize_var1")
sess.run(init_part)

var_assign = tf.Variable(1)
var_assign_times_two = var_assign.assign(var_assign * 2)#创建赋值Op
init_assign = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init_assign)
sess.run(var_assign_times_two)#2
sess.run(var_assign_times_two)#4
sess.run(var_assign_times_two)#8
sess.run(var_assign.assign_add(1))#自增Op,8+1
sess.run(var_assign.assign_sub(2))#自减Op,9-2
var_idpt = tf.Variable(0)#0
init_idpt = tf.global_variables_initializer()

sess1 = tf.Session()
sess2 = tf.Session()
sess1.run(init_idpt)
sess1.run(var_idpt.assign_add(5))#0+5
sess2.run(init_idpt)
sess2.run(var_idpt.assign_add(2))#0+2
sess1.run(var_idpt.assign_add(10))#5+10
sess2.run(var_idpt.assign_add(20))#2+20
sess1.run(init_idpt)#0
sess2.run(init_idpt)#0

not_trainable = tf.Variable(0, trainable=False)#不可自动修改

with tf.name_scpoe(<name>),名称作用域(name scope)组织数据流图,将Op划分到较大有名称语句块。TensorBoard加载数据流图,名称作用域封装Op。可以把名称作用域嵌在其他名称作用域内。

import tensorflow as tf
with tf.name_scope("Scope_A"):#建立Scope_A作用域
    a = tf.add(1, 2, name="A_add")
    b = tf.multiply(a, 3, name="A_mul")

with tf.name_scope("Scope_B"):#建立Scope_B作用域
    c = tf.add(4, 5, name="B_add")
    d = tf.multiply(c, 6, name="B_mul")

e = tf.add(b, d, name="output")
writer = tf.summary.FileWriter('./name_scope_1', graph=tf.get_default_graph())
writer.close()

graph = tf.Graph()
with graph.as_default():
in_1 = tf.placeholder(tf.float32, shape=[], name="input_a")
in_2 = tf.placeholder(tf.float32, shape=[], name="input_b")
const = tf.constant(3, dtype=tf.float32, name="static_value")

with tf.name_scope("Transformation"):
    
     with tf.name_scope("A"):
          A_mul = tf.multiply(in_1, const)
          A_out = tf.subtract(A_mul, in_1)
        
      with tf.name_scope("B"):
          B_mul = tf.multiply(in_2, const)
          B_out = tf.subtract(B_mul, in_2)
        
      with tf.name_scope("C"):
          C_div = tf.div(A_out, B_out)
          C_out = tf.add(C_div, const)
        
      with tf.name_scope("D"):
          D_div = tf.div(B_out, A_out)
          D_out = tf.add(D_div, const)
        
out = tf.maximum(C_out, D_out)
        
writer = tf.summary.FileWriter('./name_scope_2', graph=graph)
writer.close()            
graph?run=-5.png graph?run=-7.png

参考资料:
《面向机器智能的TensorFlow实践》

欢迎加我微信交流:qingxingfengzi
我的微信公众号:qingxingfengzigz
我老婆张幸清的微信公众号:qingqingfeifangz

相关文章

  • 学习笔记TF006:Variable对象、名称作用域

    Tensor、Op对象不可变(immutable)。.Variable()构造方法创建Variable对象,包含S...

  • JavaScript基础语法之函数的作用域

    函数的作用域 ​ 函数作用域:全局 (global variable) 和 局部 (local variable)...

  • 作用域链

    1.定义 在一般情况下,一个作用域链包括父级变量对象(variable object)(作用域链的顶部)、函数自身...

  • 26.九大内置对象

    JSP的内置对象 JSP的四大作用域: 作用域对象就只能在自己的作用范围之内共享数据. SP中隐式对象的名称 作用...

  • JavaScript作用域学习笔记

    @(JS技巧)[JavaScript, 作用域] JavaScript作用域学习笔记 概念: 作用域就是变量与函数...

  • 变量作用域

    TensorFlow中的两个作用域: variable_scope variable_scope变量作用机制在Te...

  • (4)变量对象

    前言 对于每个执行上下文,都有三个重要属性: 变量对象(Variable object,VO) 作用域链(Scop...

  • JavaScript深入之变量对象

    每个创建的执行上下文,都有三个重要属性:变量对象(Variable object,VO)作用域链(Scope ch...

  • 作用域链

    每个执行上下文都有的三个重要的属性 变量对象(Variable object,VO) 作用域链(Scope cha...

  • JavaScript基础专题之深入执行上下文(三)

    对于ES3每个执行上下文,都有三个重要属性: 变量对象(Variable object,VO) 作用域链(Scop...

网友评论

    本文标题:学习笔记TF006:Variable对象、名称作用域

    本文链接:https://www.haomeiwen.com/subject/isaatxtx.html