Tensorflow深度学习实战之(二)--张量的属性和转换

本文详细介绍了Tensorflow中张量的基本属性,包括类型(dtype)、阶(rank)和形状(shape),并提供了张量类型的转换、形状转换的函数及使用示例。通过实例演示了如何使用tf.constant创建不同阶的张量以及如何利用tf.reshape和tf.cast进行张量转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、张量的基本属性

Tensor是Tensorflow中最重要的数据结构,在计算图中传递的数据都是张量,即n维数组或者列表,每个张量有以下三个属性:

1. 类型(dtype):数据的类型

张量的类型主要是指张量数据的存储形式,具体类型如下:

数据类型描述
tf.float3232位浮点数
tf.float6464位浮点数
tf.int6464位有符号整型
tf.int3232位有符号整型
tf.int88位有符号整型
tf.uint88位无符号整型
tf.string可变长度的字节数组,每一个张量元素都是一个字节数组
tf.bool布尔型
tf.complex64由两个32位浮点数组成的复数:实数和虚数

2. 阶(rank):Tensorflow中其张量维数的数量描述为阶

一般将零维的张量称为标量或者常数,一维的张量可理解为向量,二维张量可理解为矩阵,三维则是可以理解为多个二维张量在深度上的一个组合的数组,称之为一个立方体,而多个三维张量堆叠在一起就是四维张量,看左边的中括号的个数,有几个就是几维。

Tensorflow提供 constant 这个函数创建张量:
constant(value, dtype, shape)

1| t = tf.constant(1, tf.float32) #零维向量
2| t = tf.constant([1, 2, 3, 4], tf.float32) #一维张量
# 左边第一个中括号内有3个元素被隔开,因此形状的第一个元素n1 = 3,说明行为3;
# 左边第二个中括号内有3个元素被隔开,因此形状的第二个元素n2 = 3,说明列为3;
3| t = tf.constant([[1, 2, 3,],[4,5,6],[7,8,9]] tf.float32) #二维张量,形状为(3,3)
# 左边第一个中括号内有3个元素被隔开,因此形状的第一个元素n1 = 3,说明行为3;
# 左边第二个中括号内有2个元素被隔开,因此形状的第二个元素n2 = 2,说明列为2;
# 左边第三个中括号内有2个元素被隔开,因此形状的第三个元素n3 = 2,说明深度为2;
4| t = tf.constant([[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]] tf.float32) #三维张量,形状为(3,2,2)
矩阵
[
[1, 3],
[5, 7],
[9, 11]
]
相当于在第一个深度上
矩阵
[
[2, 4],
[6, 8],
[10, 12]
]
在第二个深度上

3. 形状(shape):张量的shape类型为(n1,n2,n3,…)

先看左边第一个中括号中有几个元素被逗号隔开,有n1个则这个张量形状的第一个元素就是n1;
再看左边第二个中括号中有几个元素被逗号隔开,有n2个则这个张量的形状第二个元素就是n2;
再看左边第三个中括号中有几个元素被逗号隔开,有n3个则这个张量的形状第二个元素就是n3;

shape属性中的元素大于等于3时,可以用3维空间来理解。
shape=(3, 4, 2)时,表示3行4列深度为2的张量
shape=(2, 3, 4, 2)时,表示有2个 3行4列深度为2的张量
shape=(6, 2, 3, 4, 2)时,表示有6个四维张量,这个四维张量又可以表示为2个 3行4列深度为2的张量。

shape中的属性分别与axis=0,axis=1、axis=2、axis=3……对应,以此类推。当维度超过3时,几何中的坐标系表示就已经错误了。但是对于理解多维是有帮助的,具体可参见多维张量的理解

二、张量转换

1.张量类型转换

Tensorflow提供了不同类型的转换函数,具体见下表所示:

函数名含义
tf.string_to_number(string_tensor, out_type = None, name = None)将字符转换为数字,out_type:可选tf.float32, tf.int32, 默认为tf.float32
tf.to_double(x, name = None)将x的值转换为double类型
tf.to_int32(x, name = None)将x的值转换为int32类型
tf.cast(x, dtype, name = None)将x的值转换为dtype指定的类型

2.张量形状转换

Tensorflow提供了reshape 函数实现形状变换需求,

函数说明
tf.reshape(tensor, shape, name = None)tensor:待改变形状的tensor ; shape:必须是int32或int64,决定输出tensor的形状;name:(可选)变换后张量的名称。 注意:如果形状的一个分量是特殊值-1,则会自动计算该维度的大小,使得元素的总数量保持不变

3.实例演示如下

import tensorflow as tf
c1 = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0],dtype=tf.float32)
c2 = tf.reshape(c1,(3,4))
c3 = tf.reshape(c1,(2,-1,3))  #将c1一维向量的形状转变为2行2列深度为3的三维张量
c4 = tf.to_double(c1)
c5 = tf.cast(c1,dtype=tf.int32) #将c1一维向量32位浮点数类型转变为32位有符号位的整数类型
sess = tf.Session()
print(sess.run(c2))
print(sess.run(c3))
print(sess.run(c4))
print(sess.run(c5))

输出结果为:

c2= [[ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]
 [ 9. 10. 11. 12.]]
c3= [[[ 1.  2.  3.]
  [ 4.  5.  6.]]

 [[ 7.  8.  9.]
  [10. 11. 12.]]]
c4= [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12.]
c5= [ 1  2  3  4  5  6  7  8  9 10 11 12]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值