请看以下示例:

import tensorflow as tf
indices = [0, 1, 2]
depth = 3
tf.one_hot(indices, depth)


输出:

<tf.Tensor: id=9, shape=(3, 3), dtype=float32, numpy=
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]], dtype=float32)>


一热张量密集。我想知道这种表示是否有效,特别是如果有很多类别。那么,为什么one_hot输出默认是密集的呢?稀疏表示会不会更便宜?

最佳答案

很有可能是因为如果您考虑用于分类的典型神经网络的输出,那么它是可能性的密集向量。为了使优化算法修改神经网络的权重,必须计算误差向量。误差(或实际上,平方误差)是输出的总和-真值(平方)。因此,以稀疏格式本地表示一种热编码只会导致优化/反向传播操作无法精简。这种无精打采的做法将是浪费,每次训练迭代都会这样做。

为了解决额外的空间...是的,它的空间要多一些,但标签通常只包含一小部分现代训练数据,而实际输入(图像/音频/等)要大得多。

我的想法遵循这样的假设,即一键式矢量用于标签……这是我无论如何都会使用它们的地方。

出于争论的目的,如果您要具有一些与稀疏表示兼容的自定义图层和输入,并且需要具有稀疏标签表示,那么一次转换为稀疏将不会损害您的性能,因为这将是使用相当快的库(例如,scipy)需要花费一次(或几次)的费用。

关于python - 为什么tensorflow.one_hot不稀疏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59587036/

10-16 17:10