各位同学好,今天和大家分享一下TensorFlow2.0中的tensor数据类型,以及各种类型之间的相互转换方法。
scaler标量:1.2
vector向量:[1.2]、[1.1,2.2,3.3] 注意:此处的[1.2]是一维的,而1.2是0维的
matrix矩阵:[[1.1,2.2],[3.3,4.4]]
tensor张量:代表任意维度的数据
value:可以为数值、列表、字符串、布尔型
shape:形状,指维数以及每一维的大小。当第一个参数value是数字时,张量的所有元素都会用该数字填充,shape=[2, 3]。当第一个参数value是一个列表时,注意列表的长度必须小于等于参数shape的大小(即各维大小的乘积)
shape:指定数据类型,如dtype=tf.float64
verify_shape:如果修改为True的话,表示检查value的形状与shape是否相符,如果不符会报错。
a1 = tf.constant(1,shape=[2,2]) # 整型tensor,2行2列都是1
a2 = tf.constant([1,2],dtype=tf.float32) # 浮点型tensor,指定数据类型
a3 = tf.constant(True) #布尔类型
a4 = tf.constant('keep coding')
将tensor类型变成数组类型显示
# ==2== 和numpy之间的转换
a1.numpy()
a5 = tf.range(4) #定义0-3的tensor列表
a5.numpy()
当tensor型数据是一个标量,即只有一个值时,可以直接使用类型转换函数:int()、float()
b = tf.ones([]) # 1
b.numpy() # 输出 1.0
int(b) # int类型的 1
float(b) # float类型的 1
# 定义一个一维tensor
a5 = tf.range(4)
a5.ndim # 返回 1
tf.rank(a5) # 返回 1
a6.shape # 返回(4,)
判断变量是否属于该数据类型,返回布尔类型: isinstance(变量, 数据类型)
判断变量是否是tensor类型,返回布尔类型: tf.is_tensor(变量)
查看变量数据类型,返回数据类型: 变量.dtype
s1 = tf.constant([1.])
s2 = tf.constant([True,False])
s3 = tf.constant('hello')
s4 = np.arange(4)
# ==1== isinstance(变量,数据类型)
# 返回布尔类型
t1 = isinstance(s1,tf.Tensor)
# ==2== tf.is_tensor(变量)
t2 = tf.is_tensor(s2)
t4 = tf.is_tensor(s4) #属于int型数据
# ==3== 变量.dtype
# 查看数据类型
t3 = s3.dtype
a = np.arange(5) #创建numpy类型数据
a.dtype #int32类型的数据
# ==1== 转换到 tensor 数据
b = tf.convert_to_tensor(a)
b.dtype #tf.int32类型
a = np.arange(5) #int32类型
b = tf.cast(a,dtype=tf.float32)
# 原来b是tf.int32类型,现在变为tf.float32类型
布尔型和整形之间的转换
整型转布尔:0转为False,大于0转为True
布尔转整型:true转为1,false转为0
定义的a1为[0,2,5],最终a3为[0,1,1]
# 定义整形tensor
a1 = tf.constant([0,2,5]) # int32 [0,2,5]
# 转为布尔型tensor
a2 = tf.cast(a1,dtype=tf.bool) # bool [False,True,True]
# 再将布尔型转回整形
a3 = tf.cast(a2,dtype=tf.int32) # int32 [0,1,1]
tf.Variable 类型属于神经网络参数类型,属于tensor类型,记录梯度相关信息,先做了解,后续会详谈。
a = tf.range(5) # 定义一个tensor数据
b = tf.Variable(a) # 变成Variable类型数据
b.trainable # 返回True
# 查看数据类型
tf.is_tensor(b) #True,属于tensor