Tensor是Tensorflow中使用在计算图中的最基本的数据单位,我们可以声明Tensor为variable,或者为Tensor提供placeholer。但首先我们必须知道如何创建Tensor。
准备工作
当我们创建Tensor并定义其为Variable时,Tensorflow就计算图中创建了相应图形结构。需要指出的一点是,我们创建了Tensor,并不意味着已经将其传入计算图。在将Tensor定义为Variable之后,Tensorflow才会将其传入计算图。
如何操作
我们将在这介绍创建Tensor的主要方法。
-
常量Tensor
用‘zero’填充Tensor
zero_tsr = tf.zeros([row_dim, col_dim])
用‘one’填充Tensor
ones_tsr = tf.ones([row_dim, col_dim])
使用现有常数创建Tensor
constant_tsr = tf.constant([1,2,3]) -
映射Tensor
我们也可以映射其他Tensor来创建新的Tensor。
zeros_similar = tf.zeros_like(constant_tsr)
ones_similar = tf.ones_like(constant_tsr)
注意:通过这种方法创建的Tensor,要首先初始化原Tensor,如果同时初始化系统会报错。 -
序列Tensor
Tensorflow允许我们定义数组Tensor。通过类似于range()或者np.linespace的操作,来定义Tensor,例如:
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].
这个函数的输出是不包含两头的定义值得 -
随机Tensor
以下生成的随机数组是均匀分布的:
randunif_tsr = tf.random_uniform([row_dim, col_dim],minval=0, maxval=1)
请注意这种随机的均匀分布数组,包含minval,但不包含maxval。(mival<=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])
如何工作
一旦我们决定如何创建Tensor,接下来我们可以使用Variable()函数来创建对应的variables, 并将创建的Tensor包含其中。
my_var = tf.Variable(tf.zeros([row_dim, col_dim]))
此外。。。。。。
我们不受限于使用内置函数。我还可以将numpy array、python list以及常数转换成Tensor,通过使用conver_to_tensor()函数。另外这个函数也可以接受将tensor作为输入。