查看相同栏目文章
Tensorflow2 基础-数据类型
基本类型
Tensor Rank 例子
scalar(标量) 0 0
vector(向量) 1 [0, 1, 2]
matrix(矩阵) 2 [[0, 1, 2], [3, 4, 5]]
N matrix(N维矩阵) N [[[0], [1], [2]], [[3], [4], [5]]] (示例为3纬矩阵)
变量类型
1、int, float, double
2、bool
3、string
基本操作
创建简单Tensor
#创建int32
In [3]: tf.constant(1)
Out[3]:
#创建float32
In [4]: tf.constant(1.1)
Out[4]:
#创建float64(double)
In [5]: tf.constant(1.1, dtype = tf.double)
Out[5]:
#创建bool
In [6]: tf.constant([True, False])
Out[6]:
#创建string
In [7]: tf.constant("hello world!!")
Out[7]:
Tensor存放的位置
TensorFlow2的变量可以存放在cpu或者gpu上,在创建变量的时候就要选择变量的存放位置,由于gpu对矩阵Tensor有很好的加速作用,所以一般存放在gpu上
#创建a存放在cpu上
In [16]: with tf.device("cpu"):
...: a = tf.constant(1)
In [17]: a.device
Out[17]: '/job:localhost/replica:0/task:0/device:CPU:0'
#创建b存放在gpu上
In [20]: with tf.device("gpu"):
...: b = tf.range(5)
In [21]: b.device
Out[21]: '/job:localhost/replica:0/task:0/device:GPU:0'
变量转化
1、如果一开始变量定义存放位置错了,可以通过语句转移变量位置
#cpu -> gpu
In [38]: aa = a.gpu()
In [39]: aa.device
Out[39]: '/job:localhost/replica:0/task:0/device:GPU:0'
#gpu -> cpu
In [43]: bb = b.cpu()
In [44]: bb.device
Out[44]: '/job:localhost/replica:0/task:0/device:CPU:0'
#Tensor -> numpy
In [46]: bbb = b.numpy()
In [47]: bbb
Out[47]: array([0, 1, 2, 3, 4])
#numpy -> Tensor
In [48]: tf.convert_to_tensor(bbb)
Out[48]:
2、检查Tensor是几纬变量
#b为vector(向量)
In [52]: tf.rank(b)
Out[52]:
#a为scalar(标量)
In [53]: tf.rank(a)
Out[53]:
#还有一种ndim方法
In [55]: a.ndim
Out[55]: 0
In [56]: b.ndim
Out[56]: 1
3、判断变量是不是Tensor
In [58]: tf.is_tensor(b)
Out[58]: True
In [59]: tf.is_tensor(bbb)
Out[59]: False
4、Tensor互相转化
In [90]: with tf.device("gpu"): ...: a = tf.range(5, dtype = tf.int32) In [91]: a Out[91]: #int32 -> int64 In [92]: tf.cast(a, dtype = tf.int64) Out[92]: #int32 -> float32 In [93]: tf.cast(a, dtype = tf.float32) Out[93]: #int32 -> float64 In [94]: tf.cast(a, dtype = tf.float64) Out[94]: #int32 -> bool In [95]: b = tf.constant([0, 1]) In [96]: tf.cast(b, dtype = bool) Out[96]: #bool-> int32 In [97]: bb = tf.constant([True, False]) In [98]: tf.cast(bb, dtype = tf.int32) Out[98]:
特殊的Tensor类型 —— Variable类型
Variable类型本质上还是Tensor,只不过这个变量类型是在Tensor下多加了一些属性
In [4]: a = tf.range(5)
In [5]: b = tf.Variable(a, name = "input")
In [6]: b
Out[6]: <tf.Variable 'input:0' shape=(5,) dtype=int32, numpy=array([0, 1, 2, 3, 4])>
In [8]: tf.rank(b)
Out[8]:
In [9]: b.name
Out[9]: 'input:0'
#该变量可以训练,具有梯度信息
In [10]: b.trainable
Out[10]: True