在pytorch中保存一个哈希值为张量值。

问题描述 投票:1回答:1

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

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

举个例子,一个标识符是这样的 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.

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

python pytorch tensor
1个回答
1
投票

问题是 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)
© www.soinside.com 2019 - 2024. All rights reserved.