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 つのプラットフォームで同じ数になるように修正する方法を教えてください。
ありがとう。