pytorch - 将列和行添加到多维 torch.tensor(一种总结或填充)
问题描述
张量应使用额外的行零(底部)和列零(右侧)进行更新。
我的解决方案将在下面提供。有没有更好(实际上更简单)的?
输入:( «ones»只是为了澄清 - 数字可能不同,因为在我的情况下,张量的大小完全相同,但其中包含真实值)
tensor([[[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]]])
输出:
tensor([[[[1., 1., 1., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 0.],
[0., 0., 0., 0.]],
[[1., 1., 1., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 0.],
[0., 0., 0., 0.]],
[[1., 1., 1., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 0.],
[0., 0., 0., 0.]]]])
可能的解决方案:
x1 = torch.ones(1, 3, 3, 3)
z2 = torch.cat((torch.cat((x1[0, 0, :], torch.zeros(1, 3)), 0), torch.zeros(4, 1)), 1)
z3 = torch.cat((torch.cat((x1[0, 1, :], torch.zeros(1, 3)), 0), torch.zeros(4, 1)), 1)
z4 = torch.cat((torch.cat((x1[0, 2, :], torch.zeros(1, 3)), 0), torch.zeros(4, 1)), 1)
output_t = torch.zeros(1, 3, 4, 4)
output_t[0, 0, :] = z2
output_t[0, 1, :] = z3
output_t[0, 2, :] = z4
output_t
解决方案
您可以使用 pytorch 的torch.nn.ConstantPad?d
功能来做到这一点。
from torch import nn
x1 = torch.ones(1, 3, 3, 3)
pad_value = 0
pad_func = nn.ConstantPad1d((0, 1, 0, 1), pad_value)
output_t = pad_func(x1)
你也可以nn.ConstantPad1d
用nn.ConstantPad2d
或交换nn.ConstantPad3d
。所有人都使用相同的设置完成了您想要的操作。
然后还有 numpy 的np.pad
。
x1 = torch.ones(1, 3, 3, 3)
pad_value = 0
output_n = np.pad(x1.numpy(), (0, 0), (0, 0), (0, 1), (0, 1)), "constant", constant_values=pad_value)
output_t = torch.from_numpy(output_n)
推荐阅读
- azure - 相同的 Azure 应用无法在不同的租户中运行
- rest - REST API 命名约定?
- vimeo-api - Vimeo Player.js cuepoints Uncaught TypeError: Time must be a number:
- javascript - 为什么以及何时异步代码是非阻塞的?
- json - ReactJS 从自定义 API 获取数据并渲染数据
- node.js - 带有 Passport JWT 的 Apollo 服务器
- javascript - 如何使用 tensorflowjs_converter 转换 TensorFlow 图 .pb 文件?
- laravel - laravel中html形式的更新方法
- kubernetes - Traefik 中的多个路径指向 Kubernetes 后端的相同路径
- android - Webview 没有在棉花糖设备下面显示一些像数学符号这样的文本