如何包裹火炬。 我正在尝试在火炬中调用火有关模型。 这是复制的代码: 导入火炬 导入Torch.nn作为nn #一个简单的基本模型来创建一个

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

当我尝试腌制时

import torch
import torch.nn as nn

# A simple base model to create a ScriptModel
class ExampleModel(nn.Module):
    def __init__(self, factor: int):
        super(ExampleModel, self).__init__()
        self.factor = factor

    def forward(self, x):
        return x * self.factor

# Define a wrapper model with a ModuleDict
class WrapperModel(nn.Module):
    def __init__(self, path):
        super(WrapperModel, self).__init__()
        self.model = torch.jit.load(path)


    def forward(self, name: str, x):
        return self.model(x)


scripted_model = torch.jit.script(ExampleModel(2))
scripted_model.save("model.jit")


# Initialize the WrapperModel
wrapper = WrapperModel("model.jit")
与:

wrapper

我有错误:

import pickle pickle.dumps(wrapper)

有一种方法可以调用火有关模型,以免引起此类错误?
    

totorchscript模型并不是要直接腌制。将它们视为模型的特殊冷冻版本,无法以通常的方式保存。
这是一个简单的修复 - 只需将火有关模型包装在模块中
RuntimeError: Tried to serialize object __torch__.___torch_mangle_3.ExampleModel which does not have a __getstate__ method defined!

通过使用self._model(带有下划线),我们告诉Pytorch“嘿,不要试图保存此部分”。这样,您可以无问题腌制包装纸
	

python pytorch jit pytorch-lightning torchscript
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.