TF2 基础 (2) : Tensor 介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TF2 基础 (2) : Tensor 介绍相关的知识,希望对你有一定的参考价值。
参考技术A本文是对 官方文档 的学习笔记。
Tensor 的特点:
这是一个 0 阶 Tensor, 没有“轴”
一阶 Tensor 类似一个 List, 有一个“轴”
二阶 Tensor 类似一个 Matrix , 有两个“轴”
高阶 Tensor, 这是个 3阶 Tensor , shape 是 [3, 2, 5]
注意:shape 的规则,最内部的数据个数, 在最后边。 比如上例, 它的shape 是 [3, 2, 5], 意思是最内部的数组(不再包含其他数组)所包含的元素是 5个, 次内部的数组,每个包含2个元素, 以此类推。
对于一般的 Tensor 来说 tf.Tensor (之前我们讨论的) 要求内部数据形状必须是矩形 (所有轴上的数据长度相等), 但也有比较特殊的Tensor , 支持不规则数据形状。
Tensor 支持常见的数学运算
关于 Tensor 的词汇
关于这一段, 原文里面大部分说的很抽象, 没啥指导意义。 倒是这张图, 还有其中的一句话比较有意义。 右边的数值,更加local ,而且在内存上距离更近。 比如上面图所示, 右边的feature 就表示一个sample 的中的feature ,他们之间距离更近。
TensorFlow index 规则:
把 [3,1] shape 转换成 Python list : as_list
reshape 是转换Tensor shape 的最简单的方式
reshape 以后, Tensor 对象会更新, 新的Tensor 还指向相同的数据(The data maintains its layout in memory and a new tensor is created, with the requested shape, pointing to the same data. )
用: tf.reshape(some_tensor, [-1])
reshape 一般用于增加、减少一个维度。对于上面 3* 2 * 3 Tensor 的例子,减少维度的例子:
如下, 改变轴的顺序应该用 tf.transpose
有人称为是动态形状 Tensor
广播是从NumPy中的等效功能中借用的概念。简而言之,在某些情况下,在对它们进行组合操作时,较小的张量会自动“拉伸”以适合较大的张量。
最简单和最常见的情况是尝试将张量乘或加到标量时。在这种情况下,标量被广播为与其他自变量相同的形状。
在大多数情况下,广播既节省时间又节省空间,因为广播操作永远不会实现内存中扩展的张量。
注意, 这不和上面广播不一样, broadcast_to 产生的新 Tensor 并不会节约内存。
TF2 中很多函数都会要求参数是 Tensor ,如果参数不是 Tensor 则会调用 convert_to_tensor 来做转换。 有些类型, 比如 ndarray, TensorShape,Python list, tf.Variable 已经“注册”了, 他们可以自动转换成 Tensor。 对于自定义类型, 可以 tf.register_tensor_conversion_function 来注册转换函数。
沿某个轴具有可变数量元素的张量称为“Ragged Tensors”。使用 tf.ragged.RaggedTensor处理不整齐的数据。
例如
普通 Tensor 处理不了长短不一的情况
tf.string是dtype,也就是说您可以将数据表示为张量中的字符串(可变长度字节数组)。
这些字符串是原子的,无法像Python字符串那样被索引。字符串的长度不是张量的轴之一。有关操作它们的功能,请参见 tf.strings 。
在上面的打印输出中,b前缀表示tf.string dtype不是unicode字符串,而是字节字符串。有关在TensorFlow中处理Unicode文本的更多信息,请参见Unicode教程。
如果传递unicode字符,则它们是utf-8编码的。
可以在tf.strings中找到一些带有字符串的基本功能,包括tf.strings.split。
其他更多关于 String Tensor ,可以参考 string_tensors
Sparse tensors 用来存储稀疏矩阵类型的数据。
以上是关于TF2 基础 (2) : Tensor 介绍的主要内容,如果未能解决你的问题,请参考以下文章
keras 报错 ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Ten