【问题标题】:how to solve the values changed when converting a pytorch Variable to numpy? [duplicate]如何解决将 pytorch 变量转换为 numpy 时更改的值? [复制]
【发布时间】:2020-09-29 11:00:26
【问题描述】:

我正在尝试将 resnet34 的一个参数转换为 numpy ,但我发现转换后值会发生变化,如图所示。 为什么会发生这种情况?我该怎么做才能获得 numpy 格式的精确值? enter image description here

(我正在尝试在 Torch 预训练模型中获取参数并将它们放入 tensorflow 1.x 模型中,因为在搜索了几天后,我在 tensorflow1 中找不到预训练的 resnet34 模型。恐怕这种值的改变会影响模型的准确性。)

(顺便说一句,有没有办法下载带有基本块而不是瓶颈块的 tensorflow1.x resnet34 预训练模型? 我在github上搜索了几天,但没有找到。我讨厌张量流。)

【问题讨论】:

    标签: python numpy tensorflow pytorch resnet


    【解决方案1】:

    值在技术上是相同的,只是四舍五入到小数点后 04 位。

    使用下面的代码,你应该有相同的输出:

    print(round(weight_np[0,0,0,0],4))
    

    【讨论】:

    • 非常感谢!那么numpy的值是否精确?(对不起,我对Pytorch不熟悉,所以我必须确定)
    【解决方案2】:

    这些值没有改变,它们是相同的,但 PyTorch 将默认输出限制为 4 位小数(四舍五入)以便于检查。

    您可以使用 torch.set_printoptions 更改该行为以显示更多小数位。

    value = torch.tensor(0.0052872747)
    
    print(value) # => tensor(0.0053)
    
    # Show 10 decimal places
    torch.set_printoptions(precision=10)
    
    print(value) # => tensor(0.0052872747)
    

    【讨论】:

    • 非常感谢你们!多好的 web stackoverflow 啊!
    【解决方案3】:

    浮点输出的默认精度位数为 4。请参阅PyTorch documentation

    您可以将其设置为 8 位数字,如下所示:

    import torch
    a = torch.tensor([0.01298734, 0.00689523])
    print(a) # tensor([0.0130, 0.0069])
    torch.set_printoptions(precision=8)
    print(a) # tensor([0.01298734, 0.00689523])
    

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 2021-02-24
      • 2019-06-13
      • 2017-11-04
      • 2018-08-17
      • 1970-01-01
      • 2020-02-09
      • 2018-12-30
      • 2021-10-13
      相关资源
      最近更新 更多