1 / 写在前面的话 /
关于“tensorflow”这个专栏,我打算一直更新下去,文章基本都是随着我的进度来的,我也是查找了一些资料并根据自己的一些理解写的,可能内容偶尔会有错误,如果出现错误,大家可以在公众号后台滴滴我,或者直接微信轰炸我,我不会介意的。
2 /tensorflow之tensor张量 /
一、张量的概念
1.在TensorFlow中,所有的数据都通过张量的形式来表示
2.从功能的角度,张量可以简单理解为多维数组
- 零阶张量表示标量(scalar),也就是一个数;
- 一阶张量为向量(vector),也就是一维数组;
- n阶张量可以理解为一个n维数组;
3.张量并没有真正保存数字,它保存的是计算过程
二、张量的属性
- Tensor(“Add:0”, shape=(), dtype=float32)
名字(name)
- “node:src_output”:node 节点名称,src_output 来自节点的第几个输出
形状(shape)
- 张量的维度信息,shape=() ,表示是标量
类型(type)
- 每一个张量会有一个唯一的类型
- TensorFlow会对参与运算的所有张量进行类型的检查,发现类型不匹配时会报错
三、张量的形状
三个术语描述张量的维度:阶(rank)、形状(shape) 、维数(dimension number)
其实可以从最外围的括号数量可以看出这个张量是几阶的,例如 [[[ 那么这个张量就是三维的也就是三阶
给大家写个小栗子:
import tensorflow as tf tens1 = tf.constant([[[1, 2, 3], [2, 2, 3]], [[5, 5, 5], [1, 4, 2]], [[2, 5, 3], [2, 6, 1]], [[1, 3, 5], [2, 3, 4]]], name='tens1') print(tens1)
其实通过我们人眼可以看出它是一个三维数组
我们来看一下输出结果:
Tensor("tens1:0", shape=(4, 2, 3), dtype=int32)
第一个参数是name 第二个参数是形状 第三个参数是数据类型
我们主要来看看第二个形状
首先解释
4 — 就是在最外围有四组二维数组
2 — 就是在二维数组里面有两个一维数组
3 — 就是在一维数组里有三个标量
再来一个例子
import tensorflow as tf scalar = tf.constant(100) vector = tf.constant([1, 2, 3, 4]) matrix = tf.constant([[1, 2, 3], [1, 2, 3]]) cube_matrix = tf.constant([[[1], [2], [3]], [[4], [1], [5]], [[1], [2], [7]]]) print(scalar.get_shape()) print(vector.get_shape()) print(matrix.get_shape()) print(cube_matrix.get_shape())
打印结果:
() (4,) (2, 3) (3, 3, 1)
get_shape方法就是得到张量的形状,也就是几维数组
四、张量的阶
1.概念
2.获取张量的元素
如何获取张量里面的元素呢?来看下面代码:
import tensorflow as tf tens1 = tf.constant([[[1, 4], [1, 5]], [[3, 4], [2, 4]], [[2, 4], [8, 4]]]) sess = tf.Session() print(sess.run(tens1)[1, 1, 0]) sess.close()
相信大家从代码就可以看出,是如何获取到里面的元素了,这里的索引与数组中的索引是一样的从0开始。
五、张量的类型