Ошибка Torchscript: объект RecursiveScriptModule не имеет атрибутаPython

Программы на Python
Ответить
Anonymous
 Ошибка Torchscript: объект RecursiveScriptModule не имеет атрибута

Сообщение Anonymous »

Я пытаюсь использовать Torchscript PyTorch для создания сценария модуля, определенного в сторонней библиотеке.
Приведенный ниже пример представляет собой абстрактную версию проблемы. Предположим, некоторая библиотека, которую я не могу изменить, определяет классы SomeClass и LibraryModule, где последний является модулем PyTorch.

Код: Выделить всё

LibraryModuleОсновной метод 
— Compute, который принимает тензор и экземпляр SomeClass.

Код: Выделить всё

import torch
import torch.nn as nn

class SomeClass:
"""A utility class in a library I cannot modify"""
def __init__(self, x):
self.x = x

class LibraryModule(nn.Module):
"""A module provided in a library I cannot modify"""
def __init__(self, in_features, out_features):
super().__init__()
self.linear = nn.Linear(in_features, out_features)

def compute(self, x, some_class_object: SomeClass):
"""
Main function of my module; like forward, but takes a non-tensor argument
"""
return self.linear(x) * some_class_object.x
Вот что я пытался получить скрипт для класса:

Код: Выделить всё

script = torch.jit.script(LibraryModule(3, 2))
print(script.compute(torch.tensor([10, 20, 30]), SomeClass(2)))
но получаю следующую ошибку:

Код: Выделить всё

  File "torchscript.py", line 25, in 
print(script.compute(torch.tensor([10, 20, 30]), SomeClass(2)))
^^^^^^^^^^^^^^
File "\Lib\site-packages\torch\jit\_script.py", line 826, in __getattr__
return super().__getattr__(attr)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "Lib\site-packages\torch\jit\_script.py", line 533, in __getattr__
return super().__getattr__(attr)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "Lib\site-packages\torch\nn\modules\module.py", line 1931, in __getattr__
raise AttributeError(
AttributeError: 'RecursiveScriptModule' object has no attribute 'compute'. Did you mean: 'compile'?
Я также пробовал напрямую написать метод:

Код: Выделить всё

compute_script = torch.jit.script(LibraryModule(3, 2).compute)
print(compute_script(torch.tensor([10, 20, 30]), SomeClass(2)))
но тогда я получаю:

Код: Выделить всё

RuntimeError:
'Tensor (inferred)' object has no attribute or method 'linear'.:
File "torchscript.py", line 21
Main function of my module; like forward, but takes a non-tensor argument
"""
return self.linear(x) * some_class_object.x
~~~~~~~~~~~ 

Подробнее здесь: [url]https://stackoverflow.com/questions/79280126/torchscript-failure-recursivescriptmodule-object-has-no-attribute[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»