TensorFlow中张量(tensor)的理解

TensorFlow字面意思——张量的流动,即保持计算节点不变让数据以张量的形式进行流动。张量tensor可以是一个变量/数组/多维数组等,可以想象成一个n维(n-dimensional)的数组、序列或列表。

tensor有三个属性:数据类型、维度(阶/rank)、shape。

Data type/数据类型

你可以为一个张量指定下列数据类型中的任意一个类型:

数据类型

Python 类型

描述

DT_FLOAT

tf.float32

32 位浮点数.

DT_DOUBLE

tf.float64

64 位浮点数.

DT_INT64

tf.int64

64 位有符号整型.

DT_INT32

tf.int32

32 位有符号整型.

DT_INT16

tf.int16

16 位有符号整型.

DT_INT8

tf.int8

8 位有符号整型.

DT_UINT8

tf.uint8

8 位无符号整型.

DT_STRING

tf.string

可变长度的字节数组.每一个张量元素都是一个字节数组.

DT_BOOL

tf.bool

布尔型.

DT_COMPLEX64

tf.complex64

由两个32位浮点数组成的复数:实数和虚数.

DT_QINT32

tf.qint32

用于量化Ops的32位有符号整型.

DT_QINT8

tf.qint8

用于量化Ops的8位有符号整型.

DT_QUINT8

tf.quint8

用于量化Ops的8位无符号整型.

阶/rank

Rank:tensor的维数,即张量是几维的数组。(直观上看就是括了几层括号)

如下分别表示0维、1维、2维和3维的张量:

1    #维度为0的标量
[1,2,3]   #维度为1,一维向量
[[1,2],[3,4]]   #维度为2, 二维矩阵
[[[1,2],[3,4]],[[1,2],[3,4]]]   #维度为3,3维空间矩阵

维度要看张量的最左边有多少个左中括号,有n个,则这个张量就是n维张量

你可以认为一个二阶张量就是我们平常所说的矩阵,一阶张量可以认为是一个向量。对于一个二阶张量你可以用语句t[i, j]来访问其中的任何元素,而对于三阶张量你可以用't[i, j, k]'来访问其中的任何元素。

数学实例

Python 例子

0

纯量 (只有大小)

s = 483

1

向量(大小和方向)

v = [1.1, 2.2, 3.3]

2

矩阵(数据表)

m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

3

3阶张量 (数据立体)

t = [[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]]

n

n阶 (自己想想看)

....

 Shape(形状)

张量的形状以  [D0, D1, … Dn-1]  的形式表示,D0 Dn 是任意的正整数。

如形状[3,4]表示第一维有3个元素,第二维有4个元素,[3,4]表示一个3行4列的矩阵。

1)在形状的中括号中有多少个数字,就代表这个张量是多少维的张量

2)形状的第一个元素要看张量最外边的中括号中有几个元素(被最外边的中括号里边的内中括号括起来的所有数据算作一个元素)被逗号隔开,有n1个则这个张量就是n1维的,形状的第一个元素就是n1;

3)形状的第二个元素要看张量中最左边的第二个中括号中有几个被逗号隔开的元素,有n2个则shape的第二个元素就是n2;

4)形状的第二个元素之后的第3,4…n个元素依次类推,分别看第n个中括号中有几个元素即可。

例如:

1    # 形状为[]
[1,2,3]   # 形状为[3]
[[1,2],[3,4]]   # 形状为[2,2]
[[[1,2],[3,4]],[[1,2],[3,4]]]   # 形状为[2,2,2]

参考:

https://blog.csdn.net/dcrmg/article/details/79017146

https://blog.csdn.net/zhujianing1993/article/details/69218962

关于tensor的rank、shape属性对应的api:

import tensorflow as tf

a = tf.constant(5)
# Tensor.shape返回类型为TensorShape
# a.shape等效于a.get_shape()
shape = a.shape.as_list()  # 用TensorShape.as_list()将shape值转化为list
print(shape)  # 输出: []
rank = a.shape.ndims  # 用TensorShape.ndims取得tensor的rank
print(rank)  # 输出: 0

b = tf.constant([5])
shape = b.shape.as_list()
print(shape)  # 输出: [1]
rank = b.shape.ndims
print(rank)  # 输出: 1

c = tf.constant([5, 4, 3])
shape = c.shape.as_list()
print(shape)  # 输出: [3]
rank = c.shape.ndims
print(rank)  # 输出: 1

d = tf.constant([[5, 4, 3], [2, 1, 0]])
shape = d.shape.as_list()
print(shape)  # 输出: [2, 3]
rank = d.shape.ndims
print(rank)  # 输出: 2

e = tf.constant([[[5, 4, 3], [2, 1, 0]]])
shape = e.shape.as_list()
print(shape)  # 输出: [1, 2, 3]
rank = e.shape.ndims
print(rank)  # 输出: 3

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值