为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥9229398 2021-06-12 19:01:47
我已经为此苦苦挣扎了一段时间。我想要的只是一个 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以满足您的特定需求。


查看完整回答
反对 回复 2021-06-16
  • 2 回答
  • 0 关注
  • 390 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信