如何将变换应用于火炬张量

时间:2020-09-05 17:36:26

标签: python pytorch transform interpolation torchvision

我有一个Torch张量z,我想将一个转换矩阵mat应用于z,并使输出的大小与z完全相同。这是我正在运行的代码:

def trans(z):
    print(z)
    mat = transforms.Compose([transforms.ToPILImage(),transforms.RandomRotation(90),transforms.ToTensor()])
    z = Variable(mat(z.cpu()).cuda())
    z = nnf.interpolate(z, size=(28, 28), mode='linear', align_corners=False)
    return z
z = trans(z)

但是,出现此错误:

RuntimeError                              Traceback (most recent call last)
<ipython-input-12-e2fc36889ba5> in <module>()
      3 inputs,targs=next(iter(tst_loader))
      4 recon, mean, var = vae.predict(model, inputs[img_idx])
----> 5 out = vae.generate(model, mean, var)

4 frames
/content/vae.py in generate(model, mean, var)
     90     z = trans(z)
     91     z = Variable(z.cpu().cuda())
---> 92     out = model.decode(z)
     93     return out.data.cpu()
     94 

/content/vae.py in decode(self, z)
     56 
     57     def decode(self, z):
---> 58         out = self.z_develop(z)
     59         out = out.view(z.size(0), 64, self.z_dim, self.z_dim)
     60         out = self.decoder(out)

/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
    720             result = self._slow_forward(*input, **kwargs)
    721         else:
--> 722             result = self.forward(*input, **kwargs)
    723         for hook in itertools.chain(
    724                 _global_forward_hooks.values(),

/usr/local/lib/python3.6/dist-packages/torch/nn/modules/linear.py in forward(self, input)
     89 
     90     def forward(self, input: Tensor) -> Tensor:
---> 91         return F.linear(input, self.weight, self.bias)
     92 
     93     def extra_repr(self) -> str:

/usr/local/lib/python3.6/dist-packages/torch/nn/functional.py in linear(input, weight, bias)
   1674         ret = torch.addmm(bias, input, weight.t())
   1675     else:
-> 1676         output = input.matmul(weight.t())
   1677         if bias is not None:
   1678             output += bias

RuntimeError: mat1 dim 1 must match mat2 dim 0

如何成功应用此旋转变换mat并且这样做没有错误?

谢谢, 温尼

1 个答案:

答案 0 :(得分:1)

问题是overflow:auto期望一个批处理维度,并且基于错误消息和[root] { height: 100vh; display: flex; flex-direction: column; } [page] { flex: 1; display: flex; flex-direction: column; } [content] { flex: 1 0 0; overflow: auto; } /* Sticky Header */ table { position: relative; } th { position: sticky; top: 0; background: black; color: white; }的成功应用,您的数据似乎没有一个维度。由于您的输入是空间输入(基于<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous"> <div root> <div navbar> <nav class="navbar navbar-expand-lg navbar-dark bg-dark"><a class="navbar-brand" href="#">Company</a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav mr-auto"> <li class="nav-item"><a id="vehicles_navbar" class="nav-link" href="#">navbar1</a></li> <li class="nav-item"><a id="vehicles_navbar" class="nav-link" href="#">navbar2</a></li> <li class="nav-item"><a id="vehicles_navbar" class="nav-link" href="#">navbar3</a></li> <li class="nav-item"><a id="vehicles_navbar" class="nav-link" href="#">navbar4</a></li> <li class="nav-item"><a id="vehicles_navbar" class="nav-link" href="#">navbar5</a></li> <li class="nav-item"><a id="vehicles_navbar" class="nav-link" href="#">navbar6</a></li> <li class="nav-item"><a id="vehicles_navbar" class="nav-link" href="#">navbar7</a></li> <li class="nav-item"><a id="vehicles_navbar" class="nav-link" href="#">navbar8</a></li> </ul> </div> </nav> </div> <div page> <div header> <h1>HEADER</h1> </div> <div content> <div> <table class="table"> <thead> <tr> <th scope="col">Column 1</th> <th scope="col">Column 2</th> <th scope="col">Column 3</th> <th scope="col"> Column 4 </th> <th scope="col">Column 5</th> </tr> </thead> <tbody class="table_body"> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> <tr> <td colspan="5"> <h3>Row</h3> </td> </tr> </tbody> </table> </div> </div> <div footer> <h2>Footer</h2> </div> </div> </div>),您可以通过添加批处理尺寸并更改interpolate来解决此问题,因为对于空间输入,transformsnot implemented

size=(28, 28)

如果您希望mode仍然具有(C,H,W)的形状,则:

linear