声明变量和张量

张量是 TensorFlow 用于在计算图上操作的主要数据结构。我们可以将这些张量声明为变量和/或将它们作为占位符提供。要做到这一点,首先,我们必须学习如何创建张量。

tensor是指广义向量或矩阵的数学术语。如果向量是一维的并且矩阵是二维的,则张量是 n 维的(其中n可以是 1,2 或甚至更大)。

做好准备

当我们创建一个张量并将其声明为变量时,TensorFlow 会在我们的计算图中创建几个图结构。同样重要的是要指出,仅通过创建张量,TensorFlow 不会向计算图中添加任何内容。 TensorFlow 仅在运行初始化变量的操作后执行此操作。有关更多信息,请参阅下一节有关变量和占位符的内容。

操作步骤

在这里,我们将介绍我们可以在 TensorFlow 中创建张量的主要方法:

1.固定张量:

    • 在下面的代码中,我们创建了一个零填充张量:
zero_tsr = tf.zeros([row_dim, col_dim])
    • 在下面的代码中,我们创建了一个填充张量:
ones_tsr = tf.ones([row_dim, col_dim])
    • 在下面的代码中,我们创建了一个常量填充张量:
filled_tsr = tf.fill([row_dim, col_dim], 42)
    • 在下面的代码中,我们从现有常量中创建一个张量:
constant_tsr = tf.constant([1,2,3])

请注意,tf.constant()函数可用于将值广播到数组中,通过编写tf.constant(42, [row_dim, col_dim])来模仿tf.fill()的行为。

  1. 相似形状的张量:我们还可以根据其他张量的形状初始化变量,如下所示:
zeros_similar = tf.zeros_like(constant_tsr) 
ones_similar = tf.ones_like(constant_tsr)

请注意,由于这些张量依赖于先前的张量,我们必须按顺序初始化它们。尝试一次初始化所有张量将导致错误。有关变量和占位符,请参阅下一节末尾的“更多...”小节。

  1. 序列张量:TensorFlow 允许我们指定包含定义间隔的张量。以下函数与 NumPy 的linspace()输出和range()输出非常相似。请参阅以下函数:
linear_tsr = tf.linspace(start=0, stop=1, start=3)

得到的张量具有[0.0,0.5,1.0]的序列。请注意,此函数包含指定的停止值。有关更多信息,请参阅以下函数:

integer_seq_tsr = tf.range(start=6, limit=15, delta=3)

结果是序列[6,9,12]。请注意,此函数不包括限制值。

  1. 随机张量:以下生成的随机数来自均匀分布:
randunif_tsr = tf.random_uniform([row_dim, col_dim], minval=0, maxval=1)

注意,这种随机均匀分布来自包含minval但不包括maxvalminval <= x < maxval)的区间。

要从正态分布中获取随机抽取的张量,可以运行以下代码:

randnorm_tsr = tf.random_normal([row_dim, col_dim], mean=0.0, stddev=1.0)

有时候我们想要生成在某些范围内保证的正常随机值。 truncated_normal()函数总是在指定均值的两个标准偏差内选择正常值:

runcnorm_tsr = tf.truncated_normal([row_dim, col_dim], mean=0.0, stddev=1.0)

我们可能也对随机化数组条目感兴趣。要做到这一点,有两个函数可以帮助我们:random_shuffle()random_crop()。以下代码执行此操作:

shuffled_output = tf.random_shuffle(input_tensor) 
cropped_output = tf.random_crop(input_tensor, crop_size)

在本书的后面,我们将有兴趣随机裁剪尺寸(高度,宽度,3)的图像,其中有三种颜色光谱。要修复cropped_output中的尺寸,您必须在该尺寸中为其指定最大尺寸:

cropped_image = tf.random_crop(my_image, [height/2, width/2, 3])

工作原理

一旦我们决定如何创建张量,我们也可以通过在Variable()函数中包含张量来创建相应的变量,如下所示(下一节将详细介绍):

my_var = tf.Variable(tf.zeros([row_dim, col_dim]))

更多

我们不仅限于内置函数:我们可以使用convert_to_tensor()函数将任何 NumPy 数组转换为 Python 列表,或将常量转换为张量。注意,如果我们希望概括函数内部的计算,该函数也接受张量作为输入。

results matching ""

    No results matching ""