我有一个尺寸张量(30, 35, 49).我想重新塑造它(30, 35, 512),以便能够与另一个具有形状的张量相乘(30, 35, 512).
我想在(30, 35, 49)尺寸上对张量进行填充以使其具有(30, 35, 512)尺寸.
如何才能做到这一点?
cle*_*ros 18
虽然@nemo的解决方案可以正常工作,但有一个pytorch内部例程torch.nn.functional.pad可以做到这一点-并且具有torch.ones(*sizes)*pad_value解决方案不具备的一些属性(即其他形式的填充,例如反射填充或复制填充...它也检查一些与梯度相关的属性):
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)
Run Code Online (Sandbox Code Playgroud)
参数的语义是:
input:源张量, pad:2 * len(source.shape)格式的长度列表(从最后一个轴开始,从最后一个轴结束,从第2个到最后一个轴,从第2个到最后一个轴结束,从第3个到最后一个轴开始,等等),该形式指出应在开始和结束时添加多少维每个轴的末端mode:'constant','reflect'或'replicate'。默认值:'constant'用于各种填充value 持续填充。nem*_*emo 10
最简单的解决方案是使用填充值和目标维度分配张量,并为您分配有数据的部分:
target = torch.zeros(30, 35, 512)
source = torch.ones(30, 35, 49)
target[:, :, :49] = source
Run Code Online (Sandbox Code Playgroud)
请注意,无法保证用零填充张量,然后将其与另一个张量相乘最终会有意义,这取决于您.
coo*_*ter 10
一个可能更清晰,更适合这个问题的模块是torch.nn.ConstantPad1d例如
import torch
from torch import nn
x = torch.ones(30, 35, 49)
padded = nn.ConstantPad1d((0, 512 - 49), 0)(x)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)import torch.nn.functional as F data = torch.ones(4, 4) # pad(left, right, top, bottom) new_data = F.pad(input=data, pad=(1, 1, 1, 1), mode='constant', value=0) print(new_data)
| 归档时间: |
|
| 查看次数: |
10293 次 |
| 最近记录: |