pytorch - 从给定为张量的索引创建一个热向量

标签 pytorch

我有一个大小为 4 x 6 的张量其中 4 是批量大小,6 是序列长度。序列向量的每个元素都是某个索引(0 到 n)。我想创建一个 4 x 6 x n张量,其中第三维的向量将是索引的一种热编码,这意味着我想将 1 放入指定的索引中,其余的值将为零。

例如,我有以下张量:

[[5, 3, 2, 11, 15, 15],
[1, 4, 6, 7, 3, 3],
[2, 4, 7, 8, 9, 10],
[11, 12, 15, 2, 5, 7]]

在这里,所有值都在 (0 到 n) 之间,其中 n = 15。所以,我想将张量转换为 4 X 6 X 16张量,其中第三维将表示一个热编码向量。

如何使用 PyTorch 功能做到这一点?现在,我正在使用循环执行此操作,但我想避免循环!

最佳答案

我找到的最简单的方法。其中 x 是数字列表,而 class_count 是您拥有的类(class)数量。

def one_hot(x, class_count):
    return torch.eye(class_count)[x,:]

像这样使用它:
x = [0,2,5,4]
class_count = 8
one_hot(x,class_count)
tensor([[1., 0., 0., 0., 0., 0., 0., 0.],
        [0., 0., 1., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 1., 0., 0.],
        [0., 0., 0., 0., 1., 0., 0., 0.]])


关于pytorch - 从给定为张量的索引创建一个热向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461772/

相关文章:

python - Torch 在 PyTorch 上分配零 GPU 内存

python - Pytorch - 在 softmax 层之后选择最佳概率

python - 在 Pytorch 上使用 sigmoid 输出进行交叉熵损失

python - 优化pytorch中的多个损失函数

python-3.x - 如何包装 PyTorch 函数并实现 autograd?

python - Torch 中的 view() 和 unsqueeze() 有什么区别?

python - 在 PyTorch 中将张量向量化分配给切片

python - 增加 Pytorch 神经网络数据集的批量大小

python - PyTorch:RuntimeError:张量 a (224) 的大小必须与非单维 3 处的张量 b (244) 的大小匹配

python-3.x - 使用 Google Colab 在 Pytorch 中运行数据加载器