机器学习|什么是张量

1,221 阅读3分钟

1、什么是张量

张量 (tensor) 是一种多维数组,用于表示物理量在不同坐标系下的变换关系。在现代数学中,张量被视为多重线性函数,即对于每个参数,它输出一个数值。
张量有许多不同的定义,但它们的共同特征是它们可以处理多维数据,并且具有与矩阵和向量类似的运算规则。

图片

张量

2、张量的阶

张量的阶(rank)表征了张量的维度,但是和矩阵的秩不一样,它表示张量维度的质量;阶为1的张量等价于向量,如:[1,2,3];阶为2的张量等价于矩阵,如:[[1,2,3], [3,4,5], [1,3,4]];依次类推...

代码表示
01000
1[2, 4, 100]
2[[1,2,3], [3,4,5], [1,3,4]]
3[[[1], [3], [1000]], [[3], [1000], [2]]]
n...

如何获取张量的元素

import tensorflow.compat.v1 as tf
tens = tf.constant([[[1,2],[2,3]],[[3,4],[4,5]]])
se = tf.session()
print(se.run(tens)[1,1,0])

输出:

4

3、张量的形状和数据类型

描述张量的维度:阶,形状和维数,

  • 二维张量(2D Tensor):二维张量由一组二维元素组成,每个元素都是一个张量类型。例如:一个张量可以表示一个二维数组,其中每个元素是一个实数。
  • 三维张量(3D Tensor):三维张量由一组三维元素组成,每个元素也是一个张量类型。例如:一个张量可以表示一个三维数组,其中每个元素是一个实数、一个标量和一个维度。
  • 多维数组(多维数组):多维数组是一个张量,它由一组多维元素组成。例如:一个多维数组可以表示一个二维数组,其中每个元素是一个实数。
import tensorflow.compat.v1 as tf
tens = tf.constant([[[1,2],[2,3]],[[3,4],[4,5]]])
print(tens)

输出:

Tensor("Const_2:0", shape=(222), dtype=int32)
python类型代码表示
tf.float3232位浮点
tf.float6464位浮点
tf.int88位有符号整数
tf.int1616位有符号整数
tf.int3232位有符号整数
tf.int6464位有符号整数
tf.uint88位无符号整数
tf.string可变长度的字节数组
tf.bool布尔类型

4、创建张量

使用numpy创建张量,如下:

import numpy as np
import tensorflow.compat.v1 as tf
x = tf.constant(np.random.random(32).astype(np.float32))
y = tf.constant([123])
print(x, y)

输出:

Tensor("Const_5:0", shape=(32,), dtype=float32) Tensor("Const_6:0", shape=(3,), dtype=int32)

5、张量计算

张量支持各种计算,如转置,乘法,获取行列式,逆,分割,序列等。

1)比如张量的积,计算方法如下:

import tensorflow.compat.v1 as tf
sess = tf.InteractiveSession() # 获取默认的session,不需要显示传递session
x = tf.constant([    [2, 5, 3, -5],
    [0, 3, -2, 5],
    [4, 3, 5, 3],
    [6, 1, 4, 0]
])
y = tf.constant([    [-2, -7, 1, -1],
    [6, 5, 1, 5],
    [-4, 2, -3, 3],
    [-1, -6, -4, 0]
])
tf.matmul(x, y).eval()

输出:

array([[ 19,  47,  18,  32],
       [ 21, -19, -11,   9],
       [-13, -21, -20,  26],
       [-22, -29,  -5,  11]]dtype=int32)

2)比如张量的序列计算,计算方法如下:

sess = tf.InteractiveSession()
x = tf.constant([    [2, 5, 3, -5],
    [0, 3, -2, 5],
    [4, 3, 5, 3],
    [6, 1, 4, 0]
])
y = tf.constant([    [-2, -7, 1, -1],
    [6, 5, 1, 5],
    [-4, 2, -3, 3],
    [-1, -6, -4, 0]
])
tf.argmin(x, 1).eval()
tf.argmax(y, 1).eval()

输出:

array([3213])
array([2033])

6、处理csv文件

import tensorflow.compat.v1 as tf
sess = tf.InteractiveSession() 
dataset = tf.data.TextLineDataset('test.csv').skip(1)

对于后面的.skip()方法,传入的参数决定跳过的行数,因为csv文件往往都带有一行header,这个header内容往往和下面的数据无关,需要忽略,所以我们使用.skip()方法来实现这一目的。

7、处理图片数据

图片处理是tensorflow最经常用到的,提供了丰富的API,可以执行图像编码处理,图像大小调整,图像翻转,图像色彩调整等。

image_raw_data = tf.gfile.FastGFile(
    "../tensor.png"'r').read()

with tf.Session() as sess:
    img_data = tf.image.decode_png(image_raw_data)
    print(img_data.eval())