Tensorflow 定义变量,函数,数值计算等名字的更新方式

TensorFlow 中定义变量、函数和数值计算时的名称更新方式分为两种:命名空间和作用域。

命名空间

命名空间就是不同模块或功能下定义的变量、函数和数值计算之间彼此隔离的空间。

TensorFlow 中使用 tf.name_scope 定义命名空间,其语法为:

with tf.name_scope(name):
    # 定义变量、函数及数值计算

其中 name 是命名空间的名字。

在命名空间之内定义的变量、函数和数值计算都会自动在名字前加上 name/ 的前缀,表示属于该命名空间。例如:

with tf.name_scope('layer_1'):
    weights = tf.Variable(tf.random_normal([784, 256]))
    biases = tf.Variable(tf.zeros([256]))

with tf.name_scope('layer_2'):
    weights = tf.Variable(tf.random_normal([256, 10]))
    biases = tf.Variable(tf.zeros([10]))

其中第一个变量名字为 'layer_1/Variable',第二个变量名字为 'layer_2/Variable',它们都属于不同的命名空间。

作用域

作用域是一个更加通用的概念,可以对 TensorFlow 中所有的名称进行控制。不同于命名空间,作用域可以嵌套且不会自动加前缀。

TensorFlow 中使用 tf.variable_scope 定义作用域,其语法为:

with tf.variable_scope(name):
    # 定义变量、函数及数值计算

其中 name 是作用域的名字。如果作用域已经存在,那么作用域下的所有变量、函数和数值计算都会共享该作用域。

举个例子,我们将上面的代码改为使用作用域:

with tf.variable_scope('layer_1'):
    weights = tf.get_variable('weights', shape=[784, 256], initializer=tf.random_normal_initializer())
    biases = tf.get_variable('biases', shape=[256], initializer=tf.zeros_initializer())

with tf.variable_scope('layer_2'):
    weights = tf.get_variable('weights', shape=[256, 10], initializer=tf.random_normal_initializer())
    biases = tf.get_variable('biases', shape=[10], initializer=tf.zeros_initializer())

其中,使用 tf.get_variable 定义变量时,需要指定变量的名字和形状(可以通过初始化来推导出来),并指定初始化方式。如果作用域下已经有同名的变量,那么该变量会与已有的变量共享变量的值,因此它们的名字是相同的,但仍然可以通过 trainable_variables 方法获取到不同的变量对象。

示例

为了更好地理解命名空间和作用域的区别,我们可以考虑一个代码示例。该示例中会定义两个神经网络,每个网络各自定义了一个相同名字的隐藏层变量。

import tensorflow as tf

# 定义第一个神经网络
with tf.name_scope('network_1'):
    with tf.name_scope('layer_1'):
        weights = tf.Variable(tf.random_normal([784, 256]), name='weights')
        biases = tf.Variable(tf.zeros([256]), name='biases')
    with tf.name_scope('layer_2'):
        weights = tf.Variable(tf.random_normal([256, 10]), name='weights')
        biases = tf.Variable(tf.zeros([10]), name='biases')

# 定义第二个神经网络
with tf.variable_scope('network_2'):
    with tf.variable_scope('layer_1'):
        weights = tf.get_variable('weights', shape=[784, 256], initializer=tf.random_normal_initializer())
        biases = tf.get_variable('biases', shape=[256], initializer=tf.zeros_initializer())
    with tf.variable_scope('layer_2'):
        weights = tf.get_variable('weights', shape=[256, 10], initializer=tf.random_normal_initializer())
        biases = tf.get_variable('biases', shape=[10], initializer=tf.zeros_initializer())

# 输出变量
print('Network 1 Variables')
for var in tf.trainable_variables(scope='network_1'):
    print(var.name)

print('Network 2 Variables')
for var in tf.trainable_variables(scope='network_2'):
    print(var.name)

输出结果为:

Network 1 Variables
network_1/layer_1/weights:0
network_1/layer_1/biases:0
network_1/layer_2/weights:0
network_1/layer_2/biases:0
Network 2 Variables
network_2/layer_1/weights:0
network_2/layer_1/biases:0
network_2/layer_2/weights:0
network_2/layer_2/biases:0

从输出结果可以看出,第一个神经网络中的变量名字都带有 network_1 前缀,第二个神经网络中的变量名字则没有前缀。原因在于,命名空间会自动加前缀,而作用域不会。此外,同样的变量名字,在作用域中会被认为是同一变量,而在命名空间中则不会。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Tensorflow 定义变量,函数,数值计算等名字的更新方式 - Python技术站

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

相关文章

  • Tensorflow问题集

    ImportError: No module named PIL 错误 的解决方法:  安装Pillow:   pip install Pillow   在命令行运行tensorflow报错: ImportError: No module named matplotlib.pyplot 解决办法:yum install python-matplotlib  …

    2023年4月6日
    00
  • tensorflow1.0 dropout层

    “”” Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly. “”” import tensorflow as tf from sklearn.datasets import load_digi…

    tensorflow 2023年4月8日
    00
  • tensorflow softmax_cross_entropy_with_logits函数

    1、softmax_cross_entropy_with_logits tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None) 解释:这个函数的作用是计算 logits 经 softmax 函数激活之后的交叉熵。 对于每个独立的分类任务,这个函数是去度量概率误差。比如,在 CIFA…

    2023年4月5日
    00
  • tensorflow 基础学习四:神经网络优化算法

    指数衰减法: 公式代码如下: decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)   变量含义:   decayed_learning_rate:每一轮优化时使用的学习率   learning_rate:初始学习率   decay_rate:衰减系数   decay…

    tensorflow 2023年4月5日
    00
  • 基于Tensorflow搭建一个神经网络的实现

    在 TensorFlow 中,我们可以使用神经网络模型来进行各种任务,如分类、回归、图像识别等。下面将介绍如何使用 TensorFlow 搭建一个神经网络,并提供相应示例说明。 示例1:使用 TensorFlow 搭建一个简单的神经网络 以下是示例步骤: 导入必要的库。 python import tensorflow as tf from tensorfl…

    tensorflow 2023年5月16日
    00
  • Google Colab V100 +TensorFlow1.15.2 性能测试

    为了对比滴滴云内测版NVIDIA A100,跑了一下Google Colab V100 的 TensorFlow基准测试,现在把结果记录一下!   运行环境   平台为:Google Colab 系统为:Ubuntu 18.04 显卡为:V100-SXM2-16GB Python版本: 3.6 TensorFlow版本:1.15.2     显卡相关:   …

    tensorflow 2023年4月8日
    00
  • Tensorflow object detection API 搭建物体识别模型(三)

    三、模型训练  1)错误一:   在桌面的目标检测文件夹中打开cmd,即在路径中输入cmd后按Enter键运行。在cmd中运行命令: python /your_path/models-master/research/object_detection/model_main.py –pipeline_config_path=training/ssdlite_m…

    tensorflow 2023年4月7日
    00
  • 解决Jupyter notebook[import tensorflow as tf]报错

     参考: https://blog.csdn.net/caicai_zju/article/details/70245099

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