猿问

pytorch 梯度/导数/沿轴的差异,如 numpy.diff

我已经为此苦苦挣扎了一段时间。我想要的只是一个 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”功能的奇妙功能——这与这个问题无关。


慕哥9229398
浏览 391回答 2
2回答

BIG阳

带有固定过滤器的一维卷积应该可以解决问题: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 = kernelfilter.weight.requires_grad = False然后filter像使用torch.nn.此外,您可能想要更改padding以满足您的特定需求。
随时随地看视频慕课网APP

相关分类

Python
我要回答