我有一个包含标识符的数据集,这些标识符被保存为字符串。
我想创建一个神经网络,获取其中的标识符作为标签,然后检查两个标识符是否完全相同。如果它们是相同的,那么我想增加网络预测错误值的损失。
举个例子,一个标识符是这样的 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)