Tensorflow数据类型

TensorFlow是一个面向深度学习算法的科学计算库,内部数据保存在张量(Tensor)对象上,所有的运算操作(Operation,简称OP)也都是基于张量对象进行的。复杂的神经网络算法本质上就是各种张量相乘、相加等基本运算操作的组合。

TensorFlow中基本数据类型包含数值类型、字符串类型和布尔类型

1.1.1 数值类型

数值类型的张量是TensorFlow的主要数据载体,根据维度数来区分,可分为:
1.标量(Scalar):单个的实数,如 1.2,3.4 等,维度(Dimension)数为0,shape 为[];
2.向量(Vector):单个实数的有序集合,通过中括号包裹,如[1.2],[1.2,3.4]等,维度数为1,长度不定,shape 为[n];
3.矩阵(Matrix):n行m列实数的有序集合,如[[1,2],[3,4]],维度数为2,每个维度上的长度不定,shape为[n,m];
4.张量(Tensor):所有维度数dim>2的数组统称为张量。张量的每个维度也作轴(Axis),一般维度代表了具体的物理含义,例如Shape为[2,32,32,3]的张量共有4维,如果表示图片数据,每个维度/轴代表的含义分别是图片数量、图片高度、图片宽度、图片通道数,其中2代表了2张图片,32代表了高、宽均为32,3代表了RGB共3个通道。为了表达方便,一般把标量、向量、矩阵也统称为张量,不作区分,需要根据张量的维度数或形状自行判断。
(1)首先来看标量在TensorFlow中是如何创建的,实现如下:

import tensorflow as tf
a = 1.2
aa = tf.constant(a)   # 创建标量
print(type(a))
print(type(aa))
print(tf.is_tensor(aa))
print(a)
print(aa)

对应的输出结果如下:在这里插入代码片

<class 'float'>
<class 'tensorflow.python.framework.ops.EagerTensor'>
True
1.2
tf.Tensor(1.2, shape=(), dtype=float32)

其中,shape表示张量的形状,dtype表示张量的数值精度
(2)向量在TensorFlow中是如何创建的,实现如下:
与标量不同,向量的定义须通过List容器传给tf.constant()函数。

x = tf.constant([1.2,3.4])
print(x)

对应的输出结果如下:

tf.Tensor([1.2 3.4], shape=(2,), dtype=float32)

(3)矩阵在TensorFlow中是如何创建的,实现如下:

y = tf.constant([[1,2],[3,4]])
print(y)

对应的输出结果如下:

tf.Tensor(
[[1 2]
 [3 4]], shape=(2, 2), dtype=int32)

(4)3维张量在TensorFlow中是如何创建的,实现如下:

z = tf.constant([[[1,2],[3,4]],[[5,6],[7,8]]])
print(z)

对应的输出结果如下:

tf.Tensor(
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]], shape=(2, 2, 2), dtype=int32)

1.1.2 字符串类型

TensorFlow还支持字符串(String)类型的数据,例如在表示图片数据时,可以先记录图片的路径字符串,再通过预处理函数根据路径读取图片张量。通过传人字符串对象即可创建字符串类型的张量,例如:

a = tf.constant('hello')
print(a)

对应的输出结果如下:

tf.Tensor(b'hello', shape=(), dtype=string)

tf. strings 模块中,提供了常见的字符串类型的工具函数,如小写化lower()、拼接join()、长度length()、切分split()等。深度学习算法主要还是以数值类型张量运算为主,字符串类型的数据使用频率较低。

1.1.3 布尔类型

为方便表达比较运算操作的结果,TensorFlow还支持布尔类型(Boolean,简称bool)的张量。布尔类型的张量只需要传人Python语言的布尔类型数据,转换成TensorFlow内部布尔型即可,例如:

a = tf.constant(True)
print(a)

b = tf.constant([True,False])
print(b)

对应的输出结果如下:

tf.Tensor(True, shape=(), dtype=bool)
tf.Tensor([ True False], shape=(2,), dtype=bool)

1.1.4 张量优化

为区分需要计算梯度信息的张量与不需要计算梯度信息的张量,TensorFlow增加了tf.Variable类型在普通的张量类型基础上添加了name、trainable等属性来支持计算图的构建。由于梯度运算会消耗大量的计算资源,而且会自动更新相关参数,对于不需要优化的张量,通过tf.Variable封装,相反,对于需要计算梯度并优化的张量,需要通过tf.Variable包裹以便 TensorFlow 跟踪相关梯度信息。通过tf.Variable()函数可以将普通张量转换为待优化张量

a = tf.constant([1,2,3])
aa = tf.Variable(a)
print(a)
print(aa)
print(aa.name)
print(aa.trainable)

对应的输出结果如下:

tf.Tensor([1 2 3], shape=(3,), dtype=int32)
<tf.Variable 'Variable:0' shape=(3,) dtype=int32, numpy=array([1, 2, 3])>
Variable:0
True

name属性用于命名计算图中的变量,这套命名体系是TensorFlow内部维护的,一般不需要用户关注name属性。
trainable属性属性表征当前张量是否需要被优化,创建Variable对象时是默认启用优化标老,可以改置trainable=False来设置张量不需要优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值