zoukankan      html  css  js  c++  java
  • tensorflow中使用变量作用域及tf.variable(),tf,getvariable()与tf.variable_scope()的用法

    一 .tf.variable() 在模型中每次调用都会重建变量,使其存储相同变量而消耗内存,如:

    def repeat_value():

      weight=tf.variable(tf.random_normal([5,5,6]),name='weight')

      return weight

    如果多次调用函数如:

    result1=repeat_value()

    result2=repeat_value() # 重复调用

    将会重复创建一份变量,却保存相同模型参数。若使用字典可以解决此类问题,却破坏模型封装性(有关字典解决此问题,可留言回复)。

    二 . tf.get_variable()与tf.variable_scope()方法可以解决上面问题,其中前者负责创建或获取指定名称的变量,后者负责传入tf.get_variable()方法的变量名称的名字空间。

    def a(input,kernel_shape):
    w=tf.get_variable('w',kernel_shape,initializer=tf.random_normal()) #创建获取名叫w的变量
    conv=tf.nn.conv2d(input,w,strides=[1,1,1,1],padding='SAME')
    return conv

    def b(img):
    with tf.variable_scope("conv1"): #创建conv1/w变量
    r1=a(img,[5,5,32,32])
    with tf.variable_scope("conv2"): #创建conv2/w变量
    r2=a(r1,[5,5,32,32])
    return r2
    # with上下文中定义的变量都会加上tf.variable_scope方法中定义的前缀,这样能够通过不同的变量作用域区分同类网络的不同参数。
    # 但第二次调用函数b(),tf.get_variable()就会抛出变量已存在,无法解决复用问题。因此,需要加上reuse=True,如下:

    def b(img):
    with tf.variable_scope("conv1",reuse=True): #创建conv1/w变量
    r1=a(img,[5,5,32,32])
    with tf.variable_scope("conv2",reuse=True): #创建conv2/w变量
    r2=a(r1,[5,5,32,32])
    return r2
    # 更改后可以反复调用了。

    三.共享作用域下的初始化(类似c++类中的继承):
    with tf.variable_scope("conv1",initializer=tf.constant_initializer(0.8)): #创建conv1/w变量
    w=tf.get_variable('w',[1]) #此处使用外围的initializer=tf.constant_initializer(0.8)初始化
    w1 = tf.get_variable('w1', [1,2], initializer=tf.random_normal()) # 此处覆盖initializer=tf.constant_initializer(0.8)初始化,
    # 使用本身initializer=tf.random_normal()初始化。

    with tf.variable_scope("conv2"): #嵌套conv1下的作用域
    w2 = tf.get_variable('w2', [1,2]) #此处使用外围的initializer=tf.constant_initializer(0.8)初始化(类似继承)
    w1 = tf.get_variable('w1', [1,2], tf.constant_initializer(0.4)) # 此处覆盖initializer=tf.constant_initializer(0.8)初始化,
    # 使用本身tf.constant_initializer(0.4)初始化。





  • 相关阅读:
    学业优秀者汇总
    计算机类教学质量国家标准(含信息安全专业)
    从《构建之法》到《终身幼儿园》
    2019-2020-1 《信息安全专业导论》教学进程
    程序设计快速入门
    铜齿铁牙UP计划
    ios app 提交评审注意事项
    IOS开发之不同版本适配问题2(#ifdef __IPHONE_7_0)
    iOS:个性化UITextView(缩进,行距,铺满)
    iOS 同一设备内的应用之间资源共享的实现
  • 原文地址:https://www.cnblogs.com/tangjunjun/p/11726412.html
Copyright © 2011-2022 走看看