PyTorch的OpenNMT问题:。copy_u函数行为不清晰

2024-04-19 13:54:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用PyTorch版本的OpenNMT,并试图修改光束搜索算法。我目前被困在beam_update函数中(在OpenNMT-py/onmt/decoders/decoder.py文件中)。当它被调用时:

{cd2}

根据.copy_函数的pythorchdocumentation,它将

Copies the elements from src into self tensor and returns self.

但是,“自我张量”指的是什么?有人能给我解释一下这个函数的作用吗,或者告诉我源代码,因为我找不到它。。。在


Tags: 文件函数pyself版本updatepytorchbeam
1条回答
网友
1楼 · 发布于 2024-04-19 13:54:13

self张量是您调用copy_的张量。 在您的示例中,它是sent_states.data。在


回答评论中提出的问题:为什么copy的行为不像赋值=

.copy()创建到新内存位置的真实副本,而使用=赋值只存储对内存位置的引用。在

下面的代码显示了执行过程中的差异:

import torch

torch.manual_seed(3515)
tensor1 = torch.rand(2, 3)
tensor2 = torch.rand(2, 2)
tensor3 = torch.rand(2, 3)
positions = torch.tensor([2, 0])

tensor2.data.copy_(tensor1.data.index_select(1, positions))
tensor3.data = tensor1.data.index_select(1, positions)
print(tensor2)
print(tensor3)
print(id(tensor1.data[0]))
print(id(tensor2.data[0]))
print(id(tensor3.data[0]))

输出:

^{pr2}$

tensor1和{}的位置相同,而张量2被复制到一个新的位置

相关问题 更多 >