Нужно векторизованное решение в pytorch - PullRequest
0 голосов
/ 13 июня 2019

Я провожу эксперимент с использованием изображений лиц в платформе PyTorch.Входными данными x является заданное изображение лица размером 5 * 5 (высота * ширина), и имеется 192 канала.

Цель: получить исправления x для patch_size (заданные в качестве аргумента).

Я получил требуемый результат с помощью двух циклов for.Но я хочу лучше векторизованное решение, чтобы стоимость вычислений была намного меньше, чем использование двух циклов for.

Используется: PyTorch 0.4.1, (12 ГБ) 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

Заранее спасибо за помощь.

...