0

Android、Tensorflow、Pytorch で浮動小数点数を比較しようとしています。私が観察したことは、Tensorflow と Android で同じ結果が得られますが、Android と Tensorflow が切り捨て操作を実行しているため、Pytorch では異なることです。次の結果をご覧ください。

TensorFlow

import tensorflow as tf
a=tf.convert_to_tensor(np.array([0.9764764, 0.79078835, 0.93181187]), dtype=tf.float32)

session = tf.Session()
result = session.run(a*a*a*a)

print(result) 

PyTorch

import torch as th

th.set_printoptions(precision=8)

a=th.from_numpy(np.array([0.9764764, 0.79078835, 0.93181187])).type(th.FloatTensor)

result = a*a*a*a


print(result)

アンドロイド:

for (index in 0 until a.size) {
   var res = a[index] * a[index] * a[index] * a[index]
   result.add(res)
}

print("r=$result")

結果は次のとおりです。

Android:           [0.9091739,  0.3910579,  0.7538986]
TensorFlow:        [0.9091739,  0.3910579,  0.7538986]
PyTorch:           [0.90917391, 0.39105791, 0.75389862]

PyTorch の値が異なることがわかります。この例ではこの影響が最小限であることはわかっていますが、トレーニングを実行していて、さまざまなバッチとエポックで 1000 ラウンド実行している場合、この違いが蓄積され、望ましくない結果が表示される可能性があります。3 つのプラットフォームで同じ数になるように修正する方法を教えてください。

ありがとう。

4

1 に答える 1