LYu*_*LYu 12 python tensorflow
我很难理解Tensorflow __CODE__和Tensorflow的含义和用法__CODE__.根据文件
Tensor - Tensor是一种类型化的多维数组.例如,您可以将一小批图像表示为具有尺寸[批次,高度,宽度,通道]的浮点数的4-D阵列.
稀疏张量 - TensorFlow将稀疏张量表示为三个独立的密集张量:索引,值和形状.在Python中,三个张量被收集到SparseTensor类中以便于使用.如果您有单独的索引,值和形状张量,请在传递给下面的操作之前将它们包装在SparseTensor对象中.
我的理解是Tensors用于操作,输入和输出.而Sparse Tensor只是Tensor的另一种表现形式(密集?).希望有人能够进一步解释这些差异以及它们的用例.
谢谢.
Ten*_*ort 24
马修做得很好,但我很想举一个例子,通过一个例子来更多地了解稀疏张量。
如果张量有许多为零的值,则可以将其称为稀疏张量。
让我们考虑一个稀疏的一维张量
[0, 7, 0, 0, 8, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)
相同张量的稀疏表示将只关注非零值
values = [7,8]
Run Code Online (Sandbox Code Playgroud)
我们还必须通过它们的索引记住这些值出现的位置
indices = [1,4]
Run Code Online (Sandbox Code Playgroud)
对于这个一维示例,一维索引形式将与某些方法一起使用,但通常索引具有多个维度,因此像这样表示索引将更加一致(并且可以在任何地方使用):
indices = [[1], [4]]
Run Code Online (Sandbox Code Playgroud)
对于值和索引,我们还没有足够的信息。有多少个零?我们表示张量的密集形状。
dense_shape = [9]
Run Code Online (Sandbox Code Playgroud)
这三件事一起,值、索引和密集形状,是张量的稀疏表示
在 tensorflow 2.0 中,它可以实现为
x = tf.SparseTensor(values=[7,8],indices=[[1],[4]],dense_shape=[9])
x
#o/p: <tensorflow.python.framework.sparse_tensor.SparseTensor at 0x7ff04a58c4a8>
print(x.values)
print(x.dense_shape)
print(x.indices)
#o/p:
tf.Tensor([7 8], shape=(2,), dtype=int32)
tf.Tensor([9], shape=(1,), dtype=int64)
tf.Tensor(
[[1]
[4]], shape=(2, 1), dtype=int64)
Run Code Online (Sandbox Code Playgroud)
编辑以更正评论中指出的索引。
Mat*_*ino 12
差异涉及计算速度.如果一个大张量有很多很多的零,那么通过迭代非零元素来执行计算会更快.因此,您应该将数据存储在SparseTensor中,并使用SparseTensors的特殊操作.
矩阵和稀疏矩阵的关系类似.稀疏矩阵在动态系统中很常见,数学家已经开发了许多特殊的操作方法.
| 归档时间: |
|
| 查看次数: |
4922 次 |
| 最近记录: |