gpt4 book ai didi

tensorflow - TensorFlow变量和TensorFlow张量之间的实现差异

转载 作者:行者123 更新时间:2023-12-03 11:47:01 27 4
gpt4 key购买 nike

首先,我知道有人问了一个相关问题here

但是,此问题与实现和内部有关。
我正在阅读论文“A Tour of TensorFlow”。从这里引用以下两点:

1。

A tensor itself does not hold or store values in memory, but provides only an interface for retrieving the value referenced by the tensor.



这向我表明,张量是一个对象,它仅存储指向操作结果的指针,并且在检索张量的结果或值时,它仅取消引用该指针。

2。

Variables can be described as persistent, mutable handles to in-memory buffers storing tensors. As such, variables are characterized by a certain shape and a fixed type.



对此我感到困惑,是因为基于上述观点,我认为张量只是存储一个指针。如果它们只是指针,它们也可能是可变的。

确切地说,这些是我的问题:
  • “内存缓冲区”是什么意思?
  • “句柄”是什么意思?
  • 我对张量内部的最初假设正确吗?
  • 张量和变量之间的基本内部实现区别是什么?为什么它们声明不同,为什么这种差异对TensorFlow至关重要?
  • 最佳答案

    在解释张量和变量之间的区别之前,我们应该准确地了解“张量”一词在TensorFlow上下文中的含义:

  • Python API 中, tf.Tensor 对象表示TensorFlow操作的符号结果。例如,在表达式t = tf.matmul(x, y)中,t是一个tf.Tensor对象,表示xy相乘的结果(它们本身可能是其他操作的符号结果,诸如NumPy数组的具体值或变量)。

    在这种情况下,“符号结果”比指向操作结果的指针要复杂得多。它更类似于一个函数对象,它在被调用(即传递给tf.Session.run())时将运行必要的计算以产生该操作的结果,并将其作为具体值返回给您(例如NumPy数组)。
  • C++ API 中, tensorflow::Tensor 对象表示多维数组的具体值。例如,MatMul内核将两个二维tensorflow::Tensor对象作为输入,并生成一个二维tensorflow::Tensor对象作为其输出。

  • 这种区别有点令人困惑,如果我们重新开始,我们可能会选择其他名称(在其他语言API中,对于符号结果,我们更喜欢名称 Output,对于具体值,我们更喜欢名称 Tensor)。

    变量也有类似的区别。在Python API中, tf.Variable 是变量的符号表示,它具有用于创建读取变量当前值并为其分配值的操作的方法。在C++实现中, tensorflow::Var 对象是共享的可变 tensorflow::Tensor对象的包装。

    有了这种背景,我们可以解决您的特定问题:
  • “内存缓冲区”是什么意思?

    内存中缓冲区只是已使用TensorFlow分配器分配的内存连续区域。 tensorflow::Tensor对象包含一个指向内存缓冲区的指针,该缓冲区保存该张量的值。缓冲区可以位于主机内存(即可从CPU访问)或设备内存(例如仅可从GPU访问)中,并且TensorFlow具有在这些内存空间之间移动数据的操作。
  • “句柄”是什么意思?

    the paper的解释中,单词“handle”以几种不同的方式使用,这与TensorFlow使用该术语的方式略有不同。本文使用“符号句柄”来引用tf.Tensor对象,并使用“持久可变的句柄”来引用tf.Variable对象。 TensorFlow代码库使用“句柄”来引用有状态对象的名称(如tf.FIFOQueuetf.TensorArray),该名称可以在不复制所有值(即call-by-reference)的情况下传递。
  • 我对张量内部的最初假设正确吗?

    您的假设最符合(C++)tensorflow::Tensor对象的定义。 (Python)tf.Tensor对象更加复杂,因为它引用的是用于计算值的函数,而不是值本身。
  • 张量和变量之间的基本内部实现区别是什么?

    在C++中,tensorflow::Tensortensorflow::Var非常相似。唯一的不同是tensorflow::Var也有一个mutex,可用于在更新变量时锁定该变量。

    在Python中,本质区别在于tf.Tensor被实现为数据流图,并且是只读的(即,通过调用tf.Session.run())。 tf.Variable既可以读取(即通过评估其读取操作),也可以写入(例如通过运行分配操作)。

    为什么它们声明不同,为什么这种差异对TensorFlow至关重要?

    张量和变量有不同的用途。张量(tf.Tensor对象)可以表示数学表达式的复杂组成,例如神经网络中的损失函数或符号梯度。变量表示随时间更新的状态,例如训练过程中的权重矩阵和卷积滤波器。虽然原则上您可以表示没有变量的模型的演化状态,但最终会得到非常大的(且重复的)数学表达式,因此变量提供了一种实现模型状态的便捷方法,例如共享与其他机器进行并行训练。
  • 关于tensorflow - TensorFlow变量和TensorFlow张量之间的实现差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40866675/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com