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