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入门测试程序

    1 import tensorflow as tf 2 from tensorflow.examples.tutorials.mnist import input_data 3 4 mnist=input_data.read_data_sets(“MNIST_data/”,one_hot=True) 5 6 # print(mnist.train.image…

    tensorflow 2023年4月8日
    00
  • TensorFlow 解决“ImportError: Could not find ‘cudnn64_6.dll’”

    1. 问题描述 运行一个基于Tensorflow的代码时报错,如下所示: ImportError: Could not find ‘cudnn64_6.dll’. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environ…

    2023年4月8日
    00
  • 使用tensorflow api生成one-hot标签数据

    使用tensorflow api生成one-hot标签数据 在刚开始学习tensorflow的时候, 会有一个最简单的手写字符识别的程序供新手开始学习,在tensorflow.example.tutorial.mnist中已经定义好了mnist的训练数据以及测试数据.并且标签已经从原来的List变成了one-hot的二维矩阵的格式.看了源码的就知道mnist…

    tensorflow 2023年4月6日
    00
  • Tensorflow暑期实践——单变量线性回归

    版权说明:浙江财经大学专业实践深度学习tensorflow——齐峰 目录 1  单变量线性回归 2  使用Tensorflow进行算法设计与训练的核心步骤 3  有监督机器学习过程示意图 4.1.1  Jupyter使用小技巧 4.2  构建模型4.3  训练模型4.4  进行预测5  小结使用Tensorflow进行算法设计与训练的核心步骤** (1)生成…

    2023年4月8日
    00
  • 20180929 北京大学 人工智能实践:Tensorflow笔记08

    https://www.bilibili.com/video/av22530538/?p=28 —————————————————————————————————————————————————————————————————— —————————————————————————————————————————————————————————————————…

    2023年4月8日
    00
  • TensorFlow 中的张量,图,会话

    tensor的含义是张量,张量是什么,听起来很高深的样子,其实我们对于张量一点都不陌生,因为像标量,向量,矩阵这些都可以被认为是特殊的张量。如下图所示:在TensorFlow中,tensor实际上就是各种“数”的统称。而flow是流动的意思。所以TensorFlow的意思就是“数”的流动,可以说TensorFlow这个名字很形象。一般来说,编程模式有两种,一…

    2023年4月7日
    00
  • tensorflow2 基础

    https://tf.wiki/  https://github.com/snowkylin/tensorflow-handbook https://blog.csdn.net/lzs781/article/details/104742043/   官网 https://tensorflow.google.cn/tutorials/images/classi…

    tensorflow 2023年4月8日
    00
  • 将TensorFlow的模型网络导出为单个文件的方法

    TensorFlow之将模型网络导出为单个文件的方法 在使用TensorFlow进行深度学习模型训练时,我们可能需要将模型网络导出为单个文件,以便后续使用或部署。本文将提供一个完整的攻略,详细讲解如何将TensorFlow的模型网络导出为单个文件,并提供两个示例说明。 如何将TensorFlow的模型网络导出为单个文件 在将TensorFlow的模型网络导出…

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