在 torchscript 中使用 torchtext vocab

Using torchtext vocab with torchscript

我正在尝试将 torchtext vocab 层与 torchscript 一起使用,但我遇到了一些错误,我想知道这里是否有人成功了。

我现在的型号是

class VocabText(torch.nn.Module):

    def __init__(self):

        super(VocabText, self).__init__()

        self.embedding = torch.nn.Embedding(10,128)

        vocab = ['This', 'is', 'a', 'test']

        counter = Counter(vocab)

        self.lookup = text.vocab.vocab(counter)

        self.tensor = torch.Tensor

    def forward(self, x: str):

        x_mapped = self.lookup(x)

        x_mapped = self.tensor(x_mapped).int()

        x_mapped = self.embedding(x_mapped)

        

        return x

当我像这样传递模型时,这会起作用:

example_str = ["is"]

model(example_str)

但是当我尝试用 torchscript 编译它时失败了:

model_scripted = torch.jit.script(model)   

model_scripted.save('model_scripted.pt')

出现以下错误:

RuntimeError: 
Unknown builtin op: aten::Tensor.
Here are some suggestions: 

对于我在forward函数的时候map lookup layer的结果

我认为是由于打字,因为词汇层需要字符串作为输入,但嵌入层将使用张量。我在前锋中间做投射。

如果有人需要,我在 colab 中有一个工作笔记本可以重现这个问题:https://colab.research.google.com/drive/14nZF5X8rQrZET_7iA1N2MUV3XSzozpeI?usp=sharing

原来我不得不更改函数来构建张量,在 https://discuss.pytorch.org/t/unknown-builtin-op-aten-tensor/62389

找到