使用tf.variable_scope() 和tf.get_variable()构建神经网络优势

一、减少变量的命名,使命名更有结构,呈现文件夹名一般的嵌套结构

def conv_relu(input, kernel_shape, bias_shape):
    # Create variable named "weights".
    weights = tf.get_variable("weights", kernel_shape,
        initializer=tf.random_normal_initializer())
    # Create variable named "biases".
    biases = tf.get_variable("biases", bias_shape,
        initializer=tf.constant_intializer(0.0))
    conv = tf.nn.conv2d(input, weights,
        strides=[1, 1, 1, 1], padding='SAME')
    return tf.nn.relu(conv + biases)    
   
   def my_image_filter(input_images):
    with tf.variable_scope("conv1"):
        # Variables created here will be named "conv1/weights", "conv1/biases".
        relu1 = conv_relu(input_images, [5, 5, 32, 32], [32])
    with tf.variable_scope("conv2"):
        # Variables created here will be named "conv2/weights", "c

这个方法中用了"weights" 和"biases"两个简称.而我们更偏向于用conv1 和 conv2这两个变量的写法,但是不同的变量需要不同的名字.这就是tf.variable_scope() 变量起作用的地方.他为变量指定了相应的命名空间,如上述代码,减少了变量的命名,使变量更结构化。

二、主要优势

result1 = my_image_filter(image1)
result2 = my_image_filter(image2)
Raises ValueError(... conv1/weights already exists ...)

with tf.variable_scope("image_filters") as scope:
    result1 = my_image_filter(image1)
    #使用四个变量为(
                               mage_filters/conv1/weights
                               mage_filters/conv2/weights
                               mage_filters/conv1/biases
                               mage_filters/conv2/biases)
    scope.reuse_variables()       
    result2 = my_image_filter(image2)
    #使用四个变量同上

如代码所示,如果未使用scope.reuse_variables()进行变量共享,则tf.get_variable()会测到已经存在的变量未共享,则报错,若共享了,则再次调用my_image_filter()函数时,tf.get_variable()会测到上次执行该函数所生成的共享类型变量(注意上次执行完该函数的共享类变量未消亡,与一般变量的不同处),(变量需满足俩次执行函数所需的该变量一模一样才可以使用共享这个办法)不会再次创建变量,节省了代码执行时间。从某种角度来说,共享的变量有全局变量的性质,而且其封装性还比全局变量好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值