Я пытаюсь преобразовать PyTorch VAE в onnx, но получаю: torch.onnx.symbolic.normal does not exist
Похоже, проблема связана с функцией reparametrize()
:
def reparametrize(self, mu, logvar):
std = logvar.mul(0.5).exp_()
if self.have_cuda:
eps = torch.normal(torch.zeros(std.size()),torch.ones(std.size())).cuda()
else:
eps = torch.normal(torch.zeros(std.size()),torch.ones(std.size()))
return eps.mul(std).add_(mu)
Я также попытался:
eps = torch.cuda.FloatTensor(std.size()).normal_()
, который выдал ошибку:
Schema not found for node. File a bug report.
Node: %173 : Float(1, 20) = aten::normal(%169, %170, %171, %172), scope: VAE
Input types:Float(1, 20), float, float, Generator
и
eps = torch.randn(std.size()).cuda()
, который выдал ошибку:
builtins.TypeError: i_(): incompatible function arguments. The following argument types are supported:
1. (self: torch._C.Node, arg0: str, arg1: int) -> torch._C.Node
Invoked with: %137 : Tensor = onnx::RandomNormal(), scope: VAE, 'shape', 133 defined in (%133 : int[] = prim::ListConstruct(%128, %132), scope: VAE) (occurred when translating randn)
Я использую cuda
.
Любые мысли приветствуются.Возможно, мне нужно подойти к z
/ latent по-другому для onnx?
ПРИМЕЧАНИЕ. Проходя по ступенькам, я вижу, что он находит RandomNormal()
для torch.randn()
, что должно быть правильно.Но в данный момент у меня нет доступа к аргументам, так как я могу это исправить?