【问题标题】:My numpy and pytorch codes have totally different results我的 numpy 和 pytorch 代码有完全不同的结果
【发布时间】:2019-02-21 17:58:00
【问题描述】:

我想计算数组的 1 次方到 K 次方的总和,并同样计算张量的 1 次方到 k 次方的总和。我发现以下代码及其结果完全不同,我不知道为什么。

我调试了代码,知道第一轮结果是相等的。

Numpy 代码:

adj_k_prob = adj_prob
adj_k_pow =  adj_prob
for i in range(K):
    adj_k_pow = np.matmul(adj_prob, adj_k_pow)
    adj_k_prob += adj_k_pow

Pytorch 代码:

adj_k_prob = adj_prob_tensor
adj_k_pow = adj_prob_tensor
for i in range(K):
    adj_k_pow = torch.matmul(adj_prob_tensor, adj_k_pow)
    adj_k_prob += adj_k_pow

循环开始时adj_prob_tensor和adj_prob的值如下:

tensor([[0.0000, 0.1429, 0.1429, 0.1429, 0.1429, 0.1429, 0.1429, 0.1429],
    [0.2500, 0.0000, 0.2500, 0.2500, 0.0000, 0.0000, 0.0000, 0.2500],
    [0.2500, 0.2500, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000, 0.2500],
    [0.2500, 0.2500, 0.2500, 0.0000, 0.0000, 0.0000, 0.0000, 0.2500],
    [0.5000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.5000, 0.0000],
    [0.5000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.5000, 0.0000],
    [0.3333, 0.0000, 0.0000, 0.0000, 0.3333, 0.3333, 0.0000, 0.0000],
    [0.2500, 0.2500, 0.2500, 0.2500, 0.0000, 0.0000, 0.0000, 0.0000]])

有什么需要检查的吗?

【问题讨论】:

  • 噢,要计算功率,您不应该在两个循环中都使用= 而不是+= 作为赋值运算符吗?不过,不确定这是否能解决您的差异问题。
  • @DavideFiocco 非常感谢您的帮助。实际上我的问题是为什么这两个代码不相等以及它们之间的区别是什么。但再次感谢您的帮助
  • @DavideFiocco 我编辑了这个问题,谢谢。
  • 你能提供adj_probadj_prob_tensor 的例子吗? stackoverflow.com/help/mcve

标签: python numpy pytorch


【解决方案1】:

问题在于使用赋值。我应该在 pytorch 中使用 .clone(),在 numpy 中使用 .copy()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    相关资源
    最近更新 更多