跳至主要內容

〔TensorFlow〕数据类型和张量

gremlins-book大约 5 分钟深度学习计算机视觉自然语言处理

数据类型

详见官方文档:https://tensorflow.google.cn/api_docs/python/tf/dtypes/DType

数据类型Python类型
DT_FLOATtf.float3232 位浮点数
DT_DOUBLEtf.float6464 位浮点数
DT_INT64tf.int6464 位有符号整型
DT_INT32tf.int3232 位有符号整型
DT_INT16tf.int1616 位有符号整型
DT_INT8tf.int88 位有符号整型
DT_UINT8tf.uint88 位无符号整型
DT_STRINGtf.string可变长度的字节数组.每一个张量元素都是一个字节数组
DT_BOOLtf.bool布尔型
DT_COMPLEX64tf.complex64由两个 32 位浮点数组成的复数:实数和虚数
DT_QINT32tf.qint32用于量化 Ops 的 32 位有符号整型
DT_QINT8tf.qint8用于量化 Ops 的 8 位有符号整型
DT_QUINT8tf.quint8用于量化 Ops 的 8 位无符号整型

张量

详见官方文档:https://tensorflow.google.cn/guide/tensor?hl=zh-cn

Tensorflow 中所有的运算操作都是基于张量进行的,是 TensorFlow 的基本单位。“张量是具有统一类型(称为 dtype)的多维数组。”,0 维数组称为标量张量,1 维数组称为向量张量,2 维数组称为矩阵张量,大于 2 维数组的统称为张量。

张量分为变量张量和常量张量,变量张量是一种可变的张量,一般作为模型的参数使用;而常量张量更类似于数组,它的值是不可变的,只能重新创建,不可修改。

张量是很复杂的,张量的重要属性是其形状、类型和值。可以通过张量的 shape 、dtype 属性和 numpy() 方法获得。

张量的基础创建

常量

API

tf.constant(value,dtype=None,shape=None,name='Const')
  • value: 第一个值 value 是必须的,可以是一个数值,也可以是一个列表。
  • dtype: 所要创建的 tensor 的数据类型
  • shape: 所要创建的 tensor 的 shape
  • name: (可选)一个该操作的别名.
# 定义一个整数类型的标量张量,没有指定数据类型,则默认是tf.int32
tensor_a = tf.constant(1)

# 定义一个浮点型类型的向量张量,默认是 tf.float32
tensor_b = tf.constant([1.1, 2.2, 3.3])

# 定义一个字符串类型的矩阵张量
tensor_c = tf.constant([['hello', 'world'], ['hello','china']])

变量

API

tf.Variable(initial_value=None, trainable=True, collections=None, validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None)

用于生成一个初始值为 initial-value 的变量,必须指定初始化值。

  • initial_value:Tensor 或可转换为 Tensor 的 Python 对象,它是 Variable 的初始值。除非 validate_shape 设置为 False,否则初始值必须具有指定的形状。也可以是一个可调用的,没有参数,在调用时返回初始值。在这种情况下,必须指定 dtype。 (请注意,init_ops.py 中的初始化函数必须首先绑定到形状才能在此处使用。)
  • validate_shape:如果为 False,则允许使用未知形状的值初始化变量。如果为 True,则 默认为 initial_value 的形状必须已知。
  • shape:新变量或现有变量的形状。
  • name:变量的可选名称。默认为“Variable”并自动获取。
  • dtype:如果设置,则 initial_value 将转换为给定类型。如果为 None,则保留数据类型(如果 initial_value 是 Tensor),或者 convert_to_tensor 将决定。
  • trainable: 若 trainable=False :防止该变量被数据流图的 GraphKeys.TRAINABLE_VARIABLES (优化器优化的默认变量列表)收集, 这样我们就不会在训练的时候尝试更新它的值。如果把 trainable 设置为 True 的话,就会把该变量放置到该列表中;如果 trainable 设置为 True 的话,就不会放置到该列表中,在训练的时候就不会更新此值。所以显而易见它的作用就是模型训练的时候是否会更新这个参数。
  • collections:一个图 graph 集合列表的关键字。新变量将添加到这个集合中。默认为[GraphKeys.GLOBAL_VARIABLES]。也可自己指定其他的集合列表;
  • validate_shape:如果为 False,则允许使用未知形状的值初始化变量。如果为 True,则默认为 initial_value 的形状必须已知。
  • caching_device:可选设备字符串,描述应该缓存变量以供读取的位置。默认为 Variable 的设备。如果不是 None,则在另一台设备上缓存。典型用法是在使用变量驻留的 Ops 的设备上进行缓存,以通过 Switch 和其他条件语句进行重复数据删除。
  • variable_def:VariableDef 协议缓冲区。如果不是 None,则使用其内容重新创建 Variable 对象,引用图中必须已存在的变量节点。图表未更改。 variable_def 和其他参数是互斥的。
  • expected_shape:TensorShape。如果设置,则 initial_value 应具有此形状。
  • import_scope:可选字符串。要添加到变量的名称范围。仅在从协议缓冲区初始化时使用。
# 定义变量
x = tf.Variable(initial_value=0)

全零张量

API

tf.zeros(shape, dtype=tf.float32, name=None)
  • shape:用于表示维度,通常为一个 int32 类型数组,或者一个一维(1-D)的 tf.int32 数字.注意不能直接使用数字
  • dtype: 所要创建的 tensor 对象的数据类型
  • name: (可选)一个该操作的别名.
# 全零张量
tensor_z = tf.zeros(shape=(2, 1), dtype=tf.int32)
print(tensor_z)
# 结果
tf.Tensor(
[[0]
 [0]], shape=(2, 1), dtype=int32)

全 1 张量

API

tf.ones(shape, dtype=tf.dtypes.float32, name=None, layout=None)
# 全1张量
tensor_o = tf.ones(shape=(2, 1), dtype=tf.int32)
print(tensor_o)
# 结果
tf.Tensor(
[[1]
 [1]], shape=(2, 1), dtype=int32)

自定义数值

API

tf.fill(dims, value, name=None)
  • dims: 类型为 int32 的 tensor 对象,用于表示输出的维度(1-D, n-D),通常为一个 int32 数组,如:[1], [2,3]等
  • value: 常量值(字符串,数字等),该参数用于设置到最终返回的 tensor 对象值中
  • name: (可选)当前操作别名
tensor_f = tf.fill([2, 3], 0)
print(tensor_f)
tf.Tensor(
[[0 0 0]
 [0 0 0]], shape=(2, 3), dtype=int32)

其他

还包括一些创建符合特定分布的张量,像正态分布、均匀分布等等

上次编辑于: