

pytorchのtorch.nn.Linearモジュールをnumpyで再現しようとしています。  
結果は多少誤差がでたため、小数点を切捨ててboolの判定を出力してみました。  
切り捨てた結果は同じ数字にもかかわらすFalse判定になってしまうのはなぜでしょうか？  
私自身コンピュータサイエンスには詳しくないため、どなたかご教授お願いします。

[code]

    import numpy as np
    import torch
    import torch.nn as nn
    from module import Linear # 自作のモジュール
    np.random.seed(42)
    
    # 自作モジュール
    x = np.random.randn(2,3,3,4)
    affine = Linear(4,6)
    
    # torch.nn.Linear
    xt = torch.tensor(x).float()
    linear = nn.Linear(4,6)
    
    # nn.Linearのパラメータを自作モジュールに上書き
    weight = linear.weight.detach().numpy().copy()
    affine.weight = weight
    bias = linear.bias.detach().numpy().copy()
    affine.bias = bias
    
    # 自作モジュールの出力
    y = affine(x)
    print(y[0][0][0][0]) # 一部を出力
    >>> -0.4672098047691683
    
    # nn.Linearの出力
    yt = linear(xt).detach().numpy().copy()
    print(yt[0][0][0][0]) # 一部を出力
    >>> -0.46720976 
    
    # boolで確認するとFalseになってしまう.....
    print(np.round(y[0][0], decimals=3) == np.round(yt[0][0], decimals=3))
    >>> array([[False, False, False, False, False, False],
           [False, False, False, False, False, False],
           [False, False, False, False, False, False]])
    
    
[/code]


CC BY-SA 4.0
2022-09-01T14:38:54.637
90882
2022-09-01T19:24:13.203
2022-09-01T19:09:01.893
54216
54216
question
python numpy pytorch deeplearning4j
浮動小数点のbool判定について


自己解決しました。  
xをxtに変換する際にnp.float64からtorch.float32にへ変換されていました。  
そのため、出力ytをtonserからndarrayにに戻した際にnp.floa32へ変換されていました。  
y(float64)とyt(float32)で同じ値にもかかわらずデータ型が一致していながいがためにFalseの判定になっていたようです。


CC BY-SA 4.0
2022-09-01T19:23:29.603
90889
2022-09-01T19:24:13.203
2022-09-01T19:24:13.203
54216
54216
90882
answer