単純な減算はTensorflowで間違った値を与えます

セオドシスシオモス

私は次の簡単なコードを持っています:

a = tf.constant([7, 6, 7, 4, 5, 4], dtype=tf.float32)

e = tf.constant(5.2, dtype = tf.float32)

with tf.Session() as sess:
    print(sess.run(a - e))

この減算の結果は次のとおりです。

[ 1.8000002   0.8000002   1.8000002  -1.1999998  -0.19999981 -1.1999998 ]

の代わりに

[ 1.8   0.8   1.8  -1.2  -0.2 -1.2 ]

それは非常に奇妙です。おそらく問題は何ですか?

Ujjwal

簡単に言うと、5.2には終了バイナリ表現がないという理由があります。したがって、1/310進数でどのように見えるかを知っている場合は、の同じ状況を想像してみてください5.2次の点を常に覚えておいてください。

10進数は、最も単純な分数形式で記述された10進数に、の累乗である分母がある場合にのみ、終了する2進数表現を持ち2ます。

あなたが考える場合5.2、それはある52/1026/5、と5の力ではありません2現在、float32(倍精度演算)では、それを表すのに32ビットしかありません。したがって、もちろん、それはそれと非常に近い5.2が完全に同じではない数を表すことになります。

したがって、減算の計算に関するTensorFlowは、わずかな違いをもたらします。

ただし、数値を変換するとtf.float64、表現はまだ正確ではありませんが、エラーが消えるのがわかります。これはPrintあなたの人生をよりシンプルにする機能の真の努力です全景を表示しているわけではありません。これは、64-bit算術演算では、真の値と内部的に表される値の差が32-bit算術演算よりもはるかに小さいためです。したがって、Print関数はゼロの連続ストリームを認識し、それを切り捨てます。

しかし、あなたがそのようなものを使うならば、あなたは次のようなPrint('%.60f'% <YOUR RESULT>)ものを見るでしょう

with tf.Session() as sess:
    ...:     for i in range(10):
    ...:         c = sess.run(a - e)
    ...:     
2018-09-09 18:50:42.209402: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1471] Adding visible gpu devices: 0
2018-09-09 18:50:42.209464: I tensorflow/core/common_runtime/gpu/gpu_device.cc:952] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-09-09 18:50:42.209475: I tensorflow/core/common_runtime/gpu/gpu_device.cc:958]      0 
2018-09-09 18:50:42.209484: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0:   N 
2018-09-09 18:50:42.209635: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1084] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 10397 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:02:00.0, compute capability: 6.1)


for item in c:
    ...:     print('%.60f' % item)
    ...:     
1.780000000000000248689957516035065054893493652343750000000000
0.780000000000000248689957516035065054893493652343750000000000
1.780000000000000248689957516035065054893493652343750000000000
-1.219999999999999751310042483964934945106506347656250000000000
-0.219999999999999751310042483964934945106506347656250000000000
-1.219999999999999751310042483964934945106506347656250000000000

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

単純な計算の値がJavaで間違った結果をもたらすのはなぜですか?オーバーフローしますか?

分類Dev

単純な計算機は間違って計算します

分類Dev

単純なPython計算は間違っています

分類Dev

単純な素数チャレンジhaskellコードは間違った答えを与えます

分類Dev

Power BI:単純な追加では間違った結果が得られます

分類Dev

Coutは単純な印刷で出力を減算します

分類Dev

Android Studioは、単純な数式の間違った結果を返します

分類Dev

単純な比較は間違った結果を投げますVue

分類Dev

私の簡単なボタンは間違った量の色を与えます

分類Dev

HIVEでの時差計算は間違った答えを出します

分類Dev

常に間違った単純な数学のluaを返す

分類Dev

単純なDOMHTMLが間違ったURLを返す

分類Dev

なぜ30日以上の減算が間違った答えをもたらすのか

分類Dev

Math.log()はc#で間違った値を与えています

分類Dev

VisualStudioでの単純な減算と誤った結果

分類Dev

単純な計算が間違っていた

分類Dev

偶数の平均は、バック間違った値を与えます

分類Dev

パンダgroupbyは間違った値を与えます

分類Dev

getJSONと$ .eachは私に間違った値を与えます

分類Dev

String.length()は私に間違った値を与えます

分類Dev

R.id.homeは間違った値を与えますか?

分類Dev

dplyrを使用した単純な変更では、「間違った結果サイズ」エラーが発生します

分類Dev

Tensorflowは、単純な計算であるはずのNanを返します

分類Dev

秒単位の時差は私に間違った答えを与えます

分類Dev

110/100を除算すると、SQLで間違った答えが返されるのはなぜですか?

分類Dev

実行中の配列を比較するが間違った結果を与える単純なプログラム

分類Dev

ダート-いくつかのdouble値を減算すると、間違った結果が得られます

分類Dev

TODAY()関数から値を減算しようとすると、間違った結果が生成されます

分類Dev

整数除算コードが間違った答えを出すのはなぜですか?

Related 関連記事

  1. 1

    単純な計算の値がJavaで間違った結果をもたらすのはなぜですか?オーバーフローしますか?

  2. 2

    単純な計算機は間違って計算します

  3. 3

    単純なPython計算は間違っています

  4. 4

    単純な素数チャレンジhaskellコードは間違った答えを与えます

  5. 5

    Power BI:単純な追加では間違った結果が得られます

  6. 6

    Coutは単純な印刷で出力を減算します

  7. 7

    Android Studioは、単純な数式の間違った結果を返します

  8. 8

    単純な比較は間違った結果を投げますVue

  9. 9

    私の簡単なボタンは間違った量の色を与えます

  10. 10

    HIVEでの時差計算は間違った答えを出します

  11. 11

    常に間違った単純な数学のluaを返す

  12. 12

    単純なDOMHTMLが間違ったURLを返す

  13. 13

    なぜ30日以上の減算が間違った答えをもたらすのか

  14. 14

    Math.log()はc#で間違った値を与えています

  15. 15

    VisualStudioでの単純な減算と誤った結果

  16. 16

    単純な計算が間違っていた

  17. 17

    偶数の平均は、バック間違った値を与えます

  18. 18

    パンダgroupbyは間違った値を与えます

  19. 19

    getJSONと$ .eachは私に間違った値を与えます

  20. 20

    String.length()は私に間違った値を与えます

  21. 21

    R.id.homeは間違った値を与えますか?

  22. 22

    dplyrを使用した単純な変更では、「間違った結果サイズ」エラーが発生します

  23. 23

    Tensorflowは、単純な計算であるはずのNanを返します

  24. 24

    秒単位の時差は私に間違った答えを与えます

  25. 25

    110/100を除算すると、SQLで間違った答えが返されるのはなぜですか?

  26. 26

    実行中の配列を比較するが間違った結果を与える単純なプログラム

  27. 27

    ダート-いくつかのdouble値を減算すると、間違った結果が得られます

  28. 28

    TODAY()関数から値を減算しようとすると、間違った結果が生成されます

  29. 29

    整数除算コードが間違った答えを出すのはなぜですか?

ホットタグ

アーカイブ