Tensorflow中tf.name_scope() 和 tf.variable_scope() 的区别

本文详细介绍了Tensorflow中tf.name_scope和tf.variable_scope的区别及用途。tf.variable_scope主要用于变量共享,避免在训练模型时创建重复的变量,特别是在使用判别器等需要共享变量的场景。此外,它还用于Tensorboard流程图的可视化,配合tf.name_scope可以更好地组织和展示模型结构。tf.get_variable和tf.Variable在创建变量时的行为差异也是理解二者区别的关键。
摘要由CSDN通过智能技术生成

目录

一、name_scope和variable_scope的用途

(1)variable_scope用途:共享变量

(2)可视化用途:画Tensorboard流程图时封装

二、TensorFlow中name_scope和variable_scope区别

(1)TF中创建变量的方式有两种:tf.get_variable()和tf.Variable()

(2)Tensorflow中有两种作用域类型

                                    "微信公众号"

 

tf.name_scope()和tf.variable_scope()是两个作用域,一般与两个创建/调用变量的函数tf.variable() 和tf.get_variable()搭配使用。它们搭配在一起的两个常见用途:1)变量共享。2)tensorboard画流程图时为了可视化封装变量。

一、name_scope和variable_scope的用途

(1)variable_scope用途:共享变量

TensorFlow (TF) 中,name_scope 和 variable_scope 主要是解决变量共享的需求。为什么要共享变量?举个简单的例子:例如,当我们研究生成对抗网络GAN的时候,判别器的任务是如果接收到的是生成器生成的图像,判别器就尝试优化自己的网络结构来使自己输出0,如果接收到的是来自真实数据的图像,那么就尝试优化自己的网络结构来使自己输出1。也就是说,生成图像和真实图像经过判别器的时候,要共享同一套变量,所以TensorFlow引入了变量共享机制。

变量共享主要涉及两个函数:

tf.variable_scope(<scope_name>)
tf.get_variable(<name>, <shape>, <initializer>)

先看函数:tf.get_variable。

tf.get_variable 和tf.Variable不同的一点是,前者拥有一个变量检查机制,会检测已经存在的变量是否设置为共享变量,如果已经存在的变量没有设置为共享变量,TensorFlow 运行到第二个拥有相同名字的变量的时候,就会报错。

例如下面代码:

def my_image_filter(input_images):
    conv1_weights = tf.Variable(tf.random_normal([5, 5, 32, 32]),name="conv1_weights")
    conv1_biases = tf.Variable(tf.zeros([32]), name="conv1_biases")
    conv1 = tf.nn.conv2d(input_images, conv1_weights,strides=[1, 1, 1, 1], padding='SAME')
    return  tf.nn.relu(conv1 + conv1_biases)

有两个变量(Variables)conv1_weighs, conv1_b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值