Comprensión y uso sencillos de Pytorch nn.funcional.unfold()

El papel de unfold es implementar manualmente la operación de ventana deslizante (en convolución), es decir, solo el volumen, sin el producto.

ret = F.unfold(inp, size) 
  • inp: Tensor de entrada, debe ser de cuatro dimensiones (B, C, H, W)
  • tamaño: tupla que representa el tamaño de la ventana deslizante
  • ret: Tensor tridimensional de salida (a, b, c), a representa el número de lotes de entrada, b representa el tamaño de la ventana deslizante y c representa el número de veces que se desliza la ventana deslizante

Por ejemplo, para un mapa de características de 1 × 1 × 5 × 5 de la siguiente manera:

[[[[  1,  2,  3,  4,  5],
   [  6,  7,  8,  9, 10],
   [ 11, 12, 13, 14, 15],
   [ 16, 17, 18, 19, 20],
   [ 21, 22, 23, 24, 25]]]]

Para realizar una operación de ventana deslizante 2×2 en él, el proceso es el siguiente:

1 2  ->  2 3  ->  3 4
6 7      7 8      8 9  ...

Escribe el código de la siguiente manera:

import torch
from torch.nn import functional as F 

x = torch.Tensor([[[[  1,  2,  3,  4,  5],
   					[  6,  7,  8,  9, 10],
   					[ 11, 12, 13, 14, 15],
   					[ 16, 17, 18, 19, 20],
   					[ 21, 22, 23, 24, 25]]]])
x = F.unfold(x, (2, 2)) 
print(x)
print(x.size())

La salida es la siguiente:

tensor([[[ 1,  2,  3,  4,  6,  7,  8,  9, 11, 12, 13, 14, 16, 17, 18, 19],
         [ 2,  3,  4,  5,  7,  8,  9, 10, 12, 13, 14, 15, 17, 18, 19, 20],
         [ 6,  7,  8,  9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24],
         [ 7,  8,  9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25]]])
torch.Size([1, 4, 16])    

El número de filas es 4, que corresponde al tamaño de la ventana deslizante de 2 × 2; y los elementos de cada columna son el contenido cubierto por la ventana deslizante a su vez, deslizado 16 veces en total, por lo que hay 16 columnas.

Supongo que te gusta

Origin blog.csdn.net/qq_40714949/article/details/112836897#comments_20974411
Recomendado
Clasificación