【问题标题】:What are symbolic tensors in TensorFlow and Keras?TensorFlow 和 Keras 中的符号张量是什么?
【发布时间】:2020-04-29 14:27:19
【问题描述】:

TensorFlow 和 Keras 中的符号张量是什么?它们与其他张量有何不同?为什么它们甚至存在?它们在 TensorFlow 和 Keras 中出现在哪里?我们应该如何处理它们,或者在处理它们时会遇到什么问题?

过去,我遇到过与符号张量相关的某些问题,例如_SymbolicException,但文档没有描述这个概念。还有another post也问了这个问题,但是,在这篇文章中,我专注于这个特定的问题,以便以后可以将答案用作参考。

【问题讨论】:

    标签: tensorflow keras terminology definition tensor


    【解决方案1】:

    根据blog.tensorflow.org符号张量与其他张量的不同之处在于它们不专门保存值。

    让我们考虑一个简单的例子。

    >>> a = tf.Variable(5, name="a")
    >>> b = tf.Variable(7, name="b")
    >>> c = (b**2 - a**3)**5
    >>> print(c)
    

    输出如下:

    tf.Tensor(1759441920, shape=(), dtype=int32)
    

    对于上述,值是专门以tf.Variable格式定义的,输出为Tensor格式。但是,张量必须包含一个值才能被视为这样。

    符号张量的不同之处在于,定义张量不需要显式值,这对使用 TensorFlow 2.0 构建神经网络有影响,TensorFlow 2.0 现在使用 Keras 作为默认 API。

    这是一个序列神经网络示例,用于构建预测酒店取消事件的分类模型(完整的 Jupyter Notebook here,如果有兴趣):

    from tensorflow.keras import models
    from tensorflow.keras import layers
    
    model = models.Sequential()
    model.add(layers.Dense(8, activation='relu', input_shape=(4,)))
    model.add(layers.Dense(1, activation='sigmoid'))
    

    这是一个符号定义的模型,因为网络中没有明确定义任何值。而是为输入变量创建一个框架,供网络读取,然后生成预测。

    在这方面,Keras 变得非常流行,因为它允许使用符号张量构建图形,同时保持命令式布局。

    【讨论】:

    • 你说“这是一个符号定义的模型”。这与符号张量有什么关系?是的,这似乎很明显,但我想要一个准确的答案。
    • 当然可以。从某种意义上说,它是相关的,符号张量不需要预定义的值,因此可以采用大量值。因此,符号定义模型是根据定义,张量是符号的模型。如果张量不是象征性的,那么如果不首先明确定义输入变量的值,就不可能运行神经网络。
    • 我还有两个(或三个)问题。 1. 有没有办法以编程方式理解张量是否是符号的(类似于 Python 中的type(my_var) 用于获取变量的类型)? 2. 我已经阅读了您链接到的博客文章,其中提到在使用顺序和功能 API 构建模型时会出现符号张量。还有其他可以出现符号张量的情况吗? 3. TF 的占位符呢?占位符与符号张量有何不同,或者为什么符号张量不称为占位符?
    • 1.根据 tensorflow.org 网站,“张量是操作输出之一的符号句柄。它不保存该操作输出的值,而是提供一种在 TensorFlow tf.compat 中计算这些值的方法.v1.Session。”这不仅仅是象征性与非象征性的情况——张量的目的首先是提供一个评估操作的框架。 2. 是的,但所描述的情况将是最常见的情况之一。 3.占位符与急切执行不兼容,因此两者不可互换。
    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 2023-03-19
    • 2017-11-22
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多