我在火炬中有一个张量。我想从开始和结束分别在该维度的第一个元素和最后一个元素的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
)
答案 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()