1、什么是张量
张量 (tensor) 是一种多维数组,用于表示物理量在不同坐标系下的变换关系。在现代数学中,张量被视为多重线性函数,即对于每个参数,它输出一个数值。
张量有许多不同的定义,但它们的共同特征是它们可以处理多维数据,并且具有与矩阵和向量类似的运算规则。
2、张量的阶
张量的阶(rank)表征了张量的维度,但是和矩阵的秩不一样,它表示张量维度的质量;阶为1的张量等价于向量,如:[1,2,3];阶为2的张量等价于矩阵,如:[[1,2,3], [3,4,5], [1,3,4]];依次类推…
阶 | 代码表示 |
---|---|
0 | 1000 |
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=(2, 2, 2), dtype=int32)
python类型 | 代码表示 |
---|---|
tf.float32 | 32位浮点 |
tf.float64 | 64位浮点 |
tf.int8 | 8位有符号整数 |
tf.int16 | 16位有符号整数 |
tf.int32 | 32位有符号整数 |
tf.int64 | 64位有符号整数 |
tf.uint8 | 8位无符号整数 |
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([1, 2, 3])
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([3, 2, 1, 3])
array([2, 0, 3, 3])
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())
原文始发于微信公众号(周末程序猿):机器学习|什么是张量
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/169397.html