我已经为此苦苦挣扎了一段时间。我想要的只是一个 torch.diff() 函数。然而,许多矩阵运算似乎并不容易与张量运算兼容。我尝试了大量的各种 pytorch 操作组合,但都没有奏效。由于 pytorch 尚未实现此基本功能,因此我首先尝试沿特定轴i+1从元素中减去元素i。但是,您不能简单地按元素执行此操作(由于张量限制),因此我尝试构建另一个张量,其中元素沿一个轴移动:ix_plus_one = [0]+list(range(0,prediction.size(1)-1))ix_differential_tensor = torch.LongTensor(ix_plus_one)diff_one_tensor = prediction[:,ix_differential_tensor]但是现在我们遇到了一个不同的问题 - 索引并不能真正在 pytorch 中模仿 numpy 广告,所以你不能用这样的“类似列表”的张量来索引。我也尝试使用张量scatter函数所以我仍然被这个试图在 pytoch 张量上获得梯度的简单问题所困扰。我所有的搜索都导致了 pytorchs 的“autograd”功能的奇妙功能——这与这个问题无关。
2 回答
BIG阳
TA贡献1859条经验 获得超6个赞
带有固定过滤器的一维卷积应该可以解决问题:
filter = torch.nn.Conv1d(in_channels=1, out_channels=1, kernel_size=2, stride=1, padding=1, groups=1, bias=False)
kernel = np.array([-1.0, 1.0])
kernel = torch.from_numpy(kernel).view(1,1,2)
filter.weight.data = kernel
filter.weight.requires_grad = False
然后filter像使用torch.nn.
此外,您可能想要更改padding以满足您的特定需求。
添加回答
举报
0/150
提交
取消