¿Cómo remodelo un tensor con dimensiones (30, 35, 49) a (30, 35, 512) al rellenarlo?
Si bien la solución de @nemo funciona bien, hay una rutina interna de pytorch, torch.nn.functional.pad , que hace lo mismo, y que tiene un par de propiedades que una torch.ones(*sizes)*pad_value no tiene (a saber otras formas de relleno, como el relleno de reflexión o el relleno de réplica... también comprueba algunas propiedades relacionadas con el degradado):
import torch.nn.functional as F source = torch.rand((5,10)) # now we expand to size (7, 11) by appending a row of 0s at pos 0 and pos 6, # and a column of 0s at pos 10 result = F.pad(input=source, pad=(0, 1, 1, 1), mode='constant', value=0)La semántica de los argumentos es:
input : el tensor fuente,pad : una lista de longitud 2 * len(source.shape) de la forma (comienza el último eje, finaliza el último eje, comienza del 2º al último eje, finaliza del 2º al último eje, comienza del 3º al último eje, etc.) que indica cómo se deben agregar muchas dimensiones al principio y al final de cada eje,mode : 'constant' , 'reflect' o 'replicate' . Predeterminado: 'constant' para los diferentes tipos de rellenovalue para el relleno constante.La solución más simple es asignar un tensor con su valor de relleno y las dimensiones de destino y asignar la parte para la que tiene datos:
target = torch.zeros(30, 35, 512) source = torch.ones(30, 35, 49) target[:, :, :49] = sourceTenga en cuenta que no hay garantía de que rellenar su tensor con ceros y luego multiplicarlo con otro tensor tenga sentido al final, eso depende de usted.
Un módulo que podría ser más claro y adecuado para esta pregunta es torch.nn.ConstantPad1d por ejemplo
import torch from torch import nn x = torch.ones(30, 35, 49) padded = nn.ConstantPad1d((0, 512 - 49), 0)(x)