TENSORFLOW变量作用域(VARIABLE SCOPE)

TensorFlow变量作用域(Variable Scope)是一个十分重要的概念,可以优化代码的可读性、复用性以及模型的可训练性。本篇文章将详细讲解TensorFlow变量作用域,并提供两条实例介绍。

什么是TensorFlow变量作用域?

TensorFlow变量作用域是一种命名空间,它用于管理同类变量对象的创建和使用。变量作用域的目的是可以在不同函数和类之间共享变量,从而减少重复代码,并确保变量的唯一性和可训练性。

变量作用域有两种类型:“tf.variable_scope”和“tf.name_scope”。

tf.variable_scope

tf.variable_scope(scope_name, reuse=None)”用于生成一个变量作用域。它生成变量作用域对象,并将其作为默认变量作用域,同时可以设置是否允许创建重名变量。具体使用方法如下:

with tf.variable_scope('scope_name', reuse=tf.AUTO_REUSE):
    # code

其中,参数“reuse=tf.AUTO_REUSE”表示允许自动重用变量。

tf.name_scope

tf.name_scope(scope_name)”用于生成一个命名空间。命名空间不会保留层次之间的变量名称作用域,它只是为了更好的可读性和可视化做出的调整。

TensorFlow变量作用域实例

下面通过两个实例来进一步说明TensorFlow变量作用域的使用。

实例1:共享变量

在使用TensorFlow训练深度神经网络时,常常需要重复使用某些变量,比如权重和偏置,为了避免大量的赋值语句,并确保变量的唯一性,可以使用变量作用域。

def my_net(input, reuse):
    with tf.variable_scope(name_or_scope='my_net', reuse=reuse):
        weights = tf.get_variable('weights', shape=[input.get_shape()[-1], 512], dtype=tf.float32,
                                  initializer=tf.truncated_normal_initializer(mean=0, stddev=0.1))
        biases = tf.get_variable('biases', shape=[512], dtype=tf.float32,
                                 initializer=tf.constant_initializer(value=0.1))
        output = tf.nn.relu(tf.matmul(input, weights) + biases)
    return output

代码中,将权重和偏置定义在“with tf.variable_scope('my_net', reuse=reuse):”语句块中,便可实现共享变量。其中,“reuse”表示是否重用参数,设置为True,便可启动参数重用。

实例2:可视化日志文件

使用TensorBoard进行可视化调试时,需要在代码中添加命名空间。代码如下:

def log_summary():
    with tf.name_scope(name='summary'):
        tf.summary.scalar('loss', self.loss)
        tf.summary.scalar('accuracy', self.accuracy)
        summary_op = tf.summary.merge_all()
    return summary_op

代码中,使用“tf.name_scope(name='summary'):”将summary命名为命名空间,然后使用各种“tf.summary scalar/histogram/image/audio”等方法将需要在TensorBoard中展示的变量写入日志文件。

总结

本篇文章从TensorFlow变量作用域的概念、使用方法以及两个实例进行了详细讲解。请大家在实际使用中多加理解和练习。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:TENSORFLOW变量作用域(VARIABLE SCOPE) - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 6-空间域卷积运算

    1- 参看 美国 冈萨雷斯的图象处理,第二版  

    卷积神经网络 2023年4月6日
    00
  • 【2021.03.03】使用卷积神经网络实现MNIST(上)

    本次的学习来源:https://www.bilibili.com/video/BV1WT4y177SA 加载库 nn、F、optim都是使用pytorch时候的常用简写 # 加载库 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as …

    2023年4月8日
    00
  • 1-7 单层卷积网络

    假设使用第一个过滤器进行卷积,得到第一个 4×4 矩阵。使用第二个过滤器进行卷积得到另外一个 4×4 矩阵。 最终各自形成一个卷积神经网络层,然后增加偏差,它是一个实数,通过 Python 的广播机制给这 16 个元素都加上同一偏差。然后应用非线性函数,为了说明,它是一个非线性激活函数 ReLU,输出结果是一个 4×4 矩阵。 对于第二个 4×4 矩阵,我们…

    2023年4月8日
    00
  • 用PyTorch微调预训练卷积神经网络

    转自:http://ruby.ctolib.com/article/wiki/77331 Fine-tune pretrained Convolutional Neural Networks with PyTorch. Features Gives access to the most popular CNN architectures pretrained…

    卷积神经网络 2023年4月8日
    00
  • 扩张卷积(dilated convolution)

    最早出现在DeeplLab系列中,作用:可以在不改变特征图尺寸的同时增大感受野,摈弃了pool的做法(丢失信息); 我们设: kernel size = k, dilation rate = d, input size = W1, output size = W2, stride=s, padding=p; Dilation convolution(扩张卷积…

    2023年4月8日
    00
  • OpenCV在矩阵上的卷积

    转载请注明出处!!!http://blog.csdn.net/zhonghuan1992            在openCV官网上说是戴面具,事实上就是又一次计算一下矩阵中的每个value,那么怎么计算呢,依据该像素点的周围信息,用一个加权的公式来进行计算。那么如今就要看,周围的信息是怎样被加权的。让我们想一下这种方式,请看以下的公式:          …

    2023年4月8日
    00
  • 图卷积网络GCN代码分析(Tensorflow版)

    2019年09月08日 18:27:55 yyl424525 阅读数 267更多 分类专栏: 深度学习   版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/yyl424525/article/details/100634211   文章目录 代码分析 `…

    2023年4月6日
    00
  • 深度拾遗(06) – 1X1卷积/global average pooling

    什么是1X1卷积 11的卷积就是对上一层的多个feature channels线性叠加,channel加权平均。只不过这个组合系数恰好可以看成是一个11的卷积。这种表示的好处是,完全可以回到模型中其他常见N*N的框架下,不用定义新的层。比如上一层通过100个卷积核得到了 W * H * 100的数据,进行10个1X1卷积后得到 W * H * 10 的数据,…

    2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部