Pytorch的有效方法是通过其第一个和最后一个元素扩展张量

时间:2018-12-09 00:03:09

标签: python pytorch

我在火炬中有一个张量。我想从开始和结束分别在该维度的第一个元素和最后一个元素的k位置处扩展该维度。
假设我有带有数据[[0, 0, 0], [1, 1, 1], [2, 2, 2]]的张量。操作extend(dim, k)可以通过以下方式进行更改:

extend(0, 1):[ [0,0,0],[0,0,0] ,[0,0,0],[1,1,1],[ 2,2,2], [2,2,2],[2,2,2] ]

extend(1, 1):[ 0 ,0、0、0, 0 ],[ 1 ,1、1、1 , 1 ],[ 2 ,2,2,2, 2 ]]

执行此操作的有效方法是什么(符合tensor.requires_grad=true

1 个答案:

答案 0 :(得分:1)

您正在使用const countBy = (arr, fn) => arr.reduce((acc, num) => { const prop = fn(num); acc[prop] = (acc[prop] || 0) + 1; return acc; }, {}); function evenOdd(n) { if (n % 2 === 0) return "even"; else return "odd"; } var nums = [1, 2, 3, 4, 5]; console.log(countBy(nums, evenOdd)); // should log: { odd: 3, even: 2 }寻找torch.nn.functional.pad
但是,要使它正常工作,您需要注意两件事:
1. mode='replicate'不适用于2D张量。因此,您需要在pad之前添加前导单例尺寸,然后在pad之前添加尺寸。
2.填充值squeeze期望的顺序是相反变暗。

pad
import torch
from torch.nn inport functional
x = torch.tensor([[0, 0, 0],[1, 1, 1], [2, 2, 2]], dtype=torch.float)
# expand along dim=0 by k=2 
f.pad(x[None,None,...], (0,0, 2, 2), mode='replicate').squeeze()
Out[]:
tensor([[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        [1., 1., 1.],
        [2., 2., 2.],
        [2., 2., 2.],
        [2., 2., 2.]])
# expand along dim=1 by k=2
f.pad(x[None,None,...], (2, 2, 0 , 0), mode='replicate').squeeze()