在pytorch中需要矢量化解决方案

时间:2019-06-13 04:40:47

标签: vectorization pytorch

我正在使用PyTorch框架中的人脸图像进行实验。输入的x是给定的大小为5 * 5(高*宽)的人脸图像,共有192个通道。

目标:获取x的patch_size(作为参数)的补丁。

我通过两个for循环获得了所需的结果。但是我想要一个更好的矢量化解决方案,以便与使用两个for循环相比,计算成本将大大降低。

使用:PyTorch 0.4.1,(12 GB)Nvidia TitanX GPU。

以下是我使用两个for循环的实现

def extractpatches( x, patch_size): # x is bsx192x5x5
   patches = x.unfold( 2, patch_size ,  1).unfold(3,patch_size,1)
   bs,c,pi,pj, _, _  = patches.size()  #bs,192,
   cnt = 0
   p = torch.empty((bs,pi*pj,c,patch_size,patch_size)).to(device)
   s = torch.empty((bs,pi*pj, c*patch_size*patch_size)).to(device) 
  //Want a vectorized method instead of two for loops below
   for i in range(pi):
      for j in range(pj):
          p[:,cnt,:,:,:] = patches[:,:,i,j,:,:]
          s[:,cnt,:] = p[:,cnt,:,:,:].view(-1,c*patch_size*patch_size)
          cnt  = cnt+1
   return s

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您可以尝试以下操作。我在实验中使用了代码的某些部分,并且对我有用。这里的l和f是张量块的列表

ERROR: Could not find a version that satisfies the requirement xldr (from versions: none)
ERROR: No matching distribution found for xldr

您可以使用玩具输入值来验证上述代码。 谢谢。