💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 声明变量和张量 张量是 TensorFlow 用于在计算图上操作的主要数据结构。我们可以将这些张量声明为变量和/或将它们作为占位符提供。要做到这一点,首先,我们必须学习如何创建张量。 > `tensor`是指广义向量或矩阵的数学术语。如果向量是一维的并且矩阵是二维的,则张量是 n 维的(其中`n`可以是 1,2 或甚至更大)。 ## 做好准备 当我们创建一个张量并将其声明为变量时,TensorFlow 会在我们的计算图中创建几个图结构。同样重要的是要指出,仅通过创建张量,TensorFlow 不会向计算图中添加任何内容。 TensorFlow 仅在运行初始化变量的操作后执行此操作。有关更多信息,请参阅下一节有关变量和占位符的内容。 ## 操作步骤 在这里,我们将介绍我们可以在 TensorFlow 中创建张量的主要方法: 1.固定张量: * * 在下面的代码中,我们创建了一个零填充张量: ```py zero_tsr = tf.zeros([row_dim, col_dim]) ``` * * 在下面的代码中,我们创建了一个填充张量: ```py ones_tsr = tf.ones([row_dim, col_dim]) ``` * * 在下面的代码中,我们创建了一个常量填充张量: ```py filled_tsr = tf.fill([row_dim, col_dim], 42) ``` * * 在下面的代码中,我们从现有常量中创建一个张量: ```py constant_tsr = tf.constant([1,2,3]) ``` > 请注意,`tf.constant()`函数可用于将值广播到数组中,通过编写`tf.constant(42, [row_dim, col_dim])`来模仿`tf.fill()`的行为。 1. 相似形状的张量:我们还可以根据其他张量的形状初始化变量,如下所示: ```py zeros_similar = tf.zeros_like(constant_tsr) ones_similar = tf.ones_like(constant_tsr) ``` > 请注意,由于这些张量依赖于先前的张量,我们必须按顺序初始化它们。尝试一次初始化所有张量将导致错误。有关变量和占位符,请参阅下一节末尾的“更多...”小节。 1. 序列张量:TensorFlow 允许我们指定包含定义间隔的张量。以下函数与 NumPy 的`linspace()`输出和`range()`输出非常相似。请参阅以下函数: ```py linear_tsr = tf.linspace(start=0, stop=1, start=3) ``` 得到的张量具有[0.0,0.5,1.0]的序列。请注意,此函数包含指定的停止值。有关更多信息,请参阅以下函数: ```py integer_seq_tsr = tf.range(start=6, limit=15, delta=3) ``` 结果是序列[6,9,12]。请注意,此函数不包括限制值。 1. 随机张量:以下生成的随机数来自均匀分布: ```py randunif_tsr = tf.random_uniform([row_dim, col_dim], minval=0, maxval=1) ``` 注意,这种随机均匀分布来自包含`minval`但不包括`maxval`(`minval <= x < maxval`)的区间。 要从正态分布中获取随机抽取的张量,可以运行以下代码: ```py randnorm_tsr = tf.random_normal([row_dim, col_dim], mean=0.0, stddev=1.0) ``` 有时候我们想要生成在某些范围内保证的正常随机值。 `truncated_normal()`函数总是在指定均值的两个标准偏差内选择正常值: ```py runcnorm_tsr = tf.truncated_normal([row_dim, col_dim], mean=0.0, stddev=1.0) ``` 我们可能也对随机化数组条目感兴趣。要做到这一点,有两个函数可以帮助我们:`random_shuffle()`和`random_crop()`。以下代码执行此操作: ```py shuffled_output = tf.random_shuffle(input_tensor) cropped_output = tf.random_crop(input_tensor, crop_size) ``` 在本书的后面,我们将有兴趣随机裁剪尺寸(高度,宽度,3)的图像,其中有三种颜色光谱。要修复`cropped_output`中的尺寸,您必须在该尺寸中为其指定最大尺寸: ```py cropped_image = tf.random_crop(my_image, [height/2, width/2, 3]) ``` ## 工作原理 一旦我们决定如何创建张量,我们也可以通过在`Variable()`函数中包含张量来创建相应的变量,如下所示(下一节将详细介绍): ```py my_var = tf.Variable(tf.zeros([row_dim, col_dim])) ``` ## 更多 我们不仅限于内置函数:我们可以使用`convert_to_tensor()`函数将任何 NumPy 数组转换为 Python 列表,或将常量转换为张量。注意,如果我们希望概括函数内部的计算,该函数也接受张量作为输入。