根据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 变得非常流行,因为它允许使用符号张量构建图形,同时保持命令式布局。