TensorFlow张量
TensorFlow,顾名思义,是一个定义和运行涉及张量计算的框架。一个张量是向量和矩阵到可能更高维度的泛化。在内部,TensorFlow将张量表示为基本数据类型的n维数组。
在编写TensorFlow程序时,你操作和传递的主要对象是tf美元张量
。一个tf美元张量
对象表示一个部分定义的计算,最终将产生一个值。TensorFlow程序的工作方式是首先构建一个tf美元张量
对象,详细描述了如何基于其他可用的张量计算每个张量,然后通过运行这个图的部分来实现所需的结果。
一个tf美元张量
具有以下属性:
- 数据类型(
float32
,int32
,或字符串
例如,) - 一个形状
张量中的每个元素都有相同的数据类型,并且数据类型总是已知的。形状(即它拥有的维数和每个维的大小)可能只是部分已知。如果它们的输入的形状也完全已知,大多数操作产生的张量的形状都是完全已知的,但在某些情况下,只有在图执行时才能找到张量的形状。
有些类型的张量是特殊的,这些将在TensorFlow指南的其他单元中介绍。主要有:
tf $变量
tf美元不变
tf SparseTensor美元
的例外特遣部队。变量
,张量的值是不可变的,这意味着在单个执行张量的上下文中,张量只有一个值。然而,对同一个张量求两次值可能会返回不同的值;例如,这个张量可以是从磁盘读取数据的结果,也可以生成一个随机数。
排名
的排名的tf美元张量
对象是它的维数。rank的同义词包括订单或学位或n维。注意,TensorFlow中的秩与数学中的矩阵秩是不一样的。如下表所示,TensorFlow中的每个rank对应一个不同的数学实体:
排名 | 数学实体 |
---|---|
0 | 标量(级) |
1 | 矢量(大小和方向) |
2 | 矩阵(数字表) |
3. | 3张量(数字立方) |
n | n张量(你懂的) |
等级0
下面的代码片段演示了创建几个rank为0的变量:
图书馆(tensorflow)哺乳动物< -特遣部队美元变量(“大象”,特遣部队美元字符串)点火< -特遣部队美元变量(451,特遣部队美元int16)浮动< -特遣部队美元变量(3.14159265359,特遣部队美元float64)its_complicated < -特遣部队美元变量(12.3-4.85我,特遣部队美元complex64)
注意:字符串在TensorFlow中被视为单个对象,而不是字符序列。可以有标量字符串、字符串的向量等。
1级
创建一个秩1特遣部队。张量
对象,您可以传递一个项目列表作为初始值。例如:
mystr < -特遣部队美元变量(c(“你好”),特遣部队美元字符串)cool_numbers < -特遣部队美元变量(c(3.14159,2.71828),特遣部队美元float32)first_primes < -特遣部队美元变量(c(2,3.,5,7,11),特遣部队美元int32)its_very_complicated < -特遣部队美元变量(c(12.3-4.85我,7.5-6.23我),特遣部队美元complex64)
更高的等级
等级2tf美元张量
对象由至少一行和至少一列组成:
mymat < -特遣部队美元变量(列表(c(7,2),c(11,3.)),特遣部队美元int16)
高秩张量,类似地,由n维数组组成。例如,在图像处理过程中,使用了许多秩为4的张量,其尺寸对应于批量示例、图像高度、图像宽度和颜色通道。
my_image < -特遣部队美元0(形状=形状(10,299,299,3.))# batch x高度x宽度x颜色
得到一个tf美元张量
对象的等级
来确定a的秩tf美元张量
对象,调用tf美元排名
方法。例如,下面的方法以编程的方式确定tf美元张量
在上一节中定义:
r < -特遣部队美元排名(my_image)r
# #特遣部队。张量(4、形状= (),dtype = int32)
指的是tf美元张量
片
张量元素可以通过使用类似的函数来提取tf美元收集()
和tf $片()
,或使用(
语法。
提取张量元素(
in R类似于从标准R数组中提取元素,尽管在功能上有一些微小的差异。相比于大多数tf美元
功能,(
默认为R样式的基于1的索引而不是基于0的索引。目前,只有数字索引(
支持(不卡塔尔世界杯欧洲预选赛赛程表支持逻辑索引或字符索引)
如果切片索引缺失,作为标量提供,或作为序列(例如由:
或seq_len ()
)
(
也支持带有卡塔尔世界杯欧洲预选赛赛程表跨步的切片,这可以在传统的R风格中指定withseq ()
或者用python样式的第二个冒号。如果您不熟悉python风格的跨步语法,请参阅这里的a快速入门
x (,seq(1,5,通过=2)]# R风格x (,1:5:2]#相当于python风格的跨步
python语法中缺失的参数是有效的,但它们必须作为NULL提供,或者必须反勾整个表达式。
(
还接受tf newaxis美元
和all_dims ()
作为参数
x[,,特遣部队美元newaxis]x (all_dims(),1]# all_dims展开到张量的形状
提取R数组和张量之间的一个重要区别(
就是负数是如何被解释的。对于tensorflow张量,负数被解释为通过从尾计数选择元素(例如,它们被解释为python风格)。
张量被(
也是,但注意张量供应给(
没有从R翻译到python。这意味着张量被解释为基于0的,如果用:
,则返回的数组不包含上界。
如果你正在将现有的python代码转换为R,请注意,你可以设置一个选项来拥有all(
参数可以通过设置纯python风格解释选项(tensorflow.extract。python风格= " ")
。看到?”[.tensorflow.tensor '
更多选项和细节。
形状
的形状张量的是每个维的元素个数。TensorFlow在图构造过程中自动推断形状。这些推断出的形状可能具有已知或未知的秩。如果秩是已知的,那么每个维度的大小可能是已知的或未知的。
TensorFlow文档使用三种符号约定来描述张量维度:秩、形状和维数。下表显示了它们之间的关系:
排名 | 形状 | 维数 | 例子 |
---|---|---|---|
0 | [] | 0-D | 0-D张量。一个标量。 |
1 | (D0) | 一维 | 形状为[5]的1-D张量。 |
2 | (D0, D1) | 二维 | 具有形状的二维张量[3,4]。 |
3. | (D0, D1, D2) | 三维 | 具有形状[1,4,3]的三维张量。 |
n | [D0, D1,…Dn-1] | 一天 | 形状为[D0, D1,…Dn-1]的张量。 |
形状可以通过int类型的列表来表示,也可以用tf TensorShape美元
。
得到一个tf美元张量
对象的形状
有两种方法来获取a的形状tf美元张量
。在构建图的时候,问一下关于张量的形状已经知道了什么通常是有用的。这可以通过阅读形状
财产的tf美元张量
对象。该方法返回一个TensorShape
对象,这是一种表示部分指定形状的方便方法(因为,在构建图时,并不是所有形状都是完全已知的)。
也有可能得到一个tf美元张量
这将代表另一个完整定义的形状tf美元张量
在运行时。的方法来完成tf美元形状
操作。通过这种方式,你可以通过构建依赖于输入的动态形状的其他张量来构建一个操纵张量形状的图tf美元张量
。
例如,下面是如何制作一个与给定矩阵列数相同大小的零向量:
改变a的形状tf美元张量
的的元素数量的是张量的所有形状的大小的乘积。一个标量的元素个数总是1
。由于通常有许多不同的形状,它们的元素数量相同,所以能够改变a的形状通常是很方便的特遣部队。张量
,保持其元素固定。这是可以做到的tf.reshape
。
下面的例子演示了如何重塑张量:
rank_three_tensor < -特遣部队美元的(形状(3.,4,5))矩阵< -特遣部队美元重塑(rank_three_tensor形状(6,10))#重塑现有内容为#一个6x10的矩阵matrixB < -特遣部队美元重塑(矩阵,形状(3.,1))#重塑现有内容为3x20#矩阵。-1告诉重塑计算#该维度的大小。matrixAlt < -特遣部队美元重塑(matrixB形状(4,3.,1))#重塑现有内容# 4 x3x5张量#注意,重塑张量的元素数量必须匹配#原始元素数。因此,以下示例生成一个# error,因为最后一个维度的值不可能匹配这个数字#的元素。
数据类型
除了维数,张量还有一个数据类型。指的是tf DType美元
页查看数据类型的完整列表。
不可能有一个tf美元张量
具有多个数据类型。然而,可以将任意数据结构序列化为字符串
S,并将它们存储在tf美元张量
年代。
是可以施法的tf美元张量
S从一种数据类型到另一种使用tf美元投
:
#将常量整数张量转换为浮点数。float_tensor < -特遣部队美元投(特遣部队美元常数(c(1, 2, 3升)),dtype =特遣部队美元float32)
检查一个tf美元张量
的数据类型使用Tensor.dtype
财产。
当创建一个tf美元张量
从一个R对象中,你可以选择指定数据类型。如果你不这样做,TensorFlow会选择一个可以代表你的数据的数据类型。TensorFlow将R个整数转换为tf int32美元
和R浮点数到tf float32美元
。否则,TensorFlow在转换为数组时使用与numpy相同的规则。