在 pytorch 中将哈希值保存为张量

Save a Hash Value as a Tensor in pytorch

我有一个数据集,其中包含保存为字符串的标识符。

我想创建一个神经网络,除其他外,将这些标识符作为标签,然后检查两个标识符是否完全相同。如果它们相同,那么如果网络预测错误值,我想增加损失。

例如,标识符如下所示 ec2c1cc2410a4e259aa9c12756e1d6e

始终为 32 个值并使用十六进制字符 (0-9a-f)。

我想在 pytorch 中使用这个值并将其保存为 tensor 但我遇到了以下问题

decimal_identifier = int(string_id, 16)
tensor_id = torch.ToTensor(decimal_identifier)

RuntimeError: Overflow when unpacking long

所以我无法将值转换为小数,因为值太大了。 知道我该如何解决这个问题吗? 我知道它总是 32 个字符,但我还没有在 pytorch.

中找到一个字符张量

如何在我的神经网络中输入这个唯一标识符?

问题是 int(string_id, 16) 将您的 32 字符长散列转换为 单个 整数。这真是一个非常非常大的数字。
相反,您可以将其转换为数组:

tensor_id = torch.tensor([int(c, 16) for c in string_id])

结果(在您的示例中):

tensor([14, 12,  2, 12,  1, 12, 12,  2,  4,  1,  0, 10,  4, 14,  2,  5,  9, 10,
        10,  9, 12,  1,  2,  7,  5,  6, 14,  1, 13,  6, 14])

您也可以一次将十六进制数字分组为 8 个(对于 int64 张量):

torch.tensor([int(string_id[i:i+8], 16) for i in range(0, len(string_id), 8)], dtype=torch.int64)