TensorFlowの熱心な実行APIがこの関数に対して間違った答えを出すのはなぜですか?

yt7589

私はその微分値を得るためにこの関数を持っていました。

def dp1_f1(x):
return 64*x*(1-x)*(math.pow((1-2*x),2) )*math.pow((1-8*x+8*x*x), 2)

dy/dx価値を手に入れたいこの値は、次のように数値法で取得できます。

def dp_numeric_diff(x):
    delta_x = 0.0001
    return (dp1_f1(x+delta_x)-dp1_f1(x))/delta_x

TensorFlowの熱心な実行APIを使用して、この値を計算します。

def dp_ad_tfe(x):
    tf.enable_eager_execution()
    tfe = tf.contrib.eager
    grad_lx = tfe.gradients_function(dp1_f1)
    x = 3.0
    y = dp1_f1(x)
    rst = grad_lx(x)
    return y, rst[0]

私はこの関数を以下のコードで呼び出します:

numeric_diff = dp_numeric_diff(x)
print('Numeric method:{0}'.format(numeric_diff))
v, d = dp_ad_tfe(x)
print('TFE:{0}'.format(d))

次のように表示されます。

Numeric method:-75290405.66440672
TFE:-19208000.0

数値法は正しいと確信しています。TensorFlowの熱心な実行コードの何が問題になっていますか?ちなみに、同じTensorFlowの熱心な実行コードは、x ^ 2のような単純な関数に対して正しい答えを得ることができます。

TensorFlowの自動微分APIは、TensorFlow操作の構成によってのみ区別できmath.pow()、他のライブラリなどの関数では区別できませんあなたが交換した場合math.pow()tf.pow()それがうまく出て動作するはずです。

何かのようなもの:

import tensorflow as tf
tf.enable_eager_execution()

def dp1_f1(x):
    return 64*x*(1-x)*(tf.pow((1-2*x),2) )*tf.pow((1-8*x+8*x*x), 2)

def dp_numeric_diff(x):
    delta_x = 0.0001
    return (dp1_f1(x+delta_x)-dp1_f1(x))/delta_x

grad = tf.contrib.eager.gradients_function(dp1_f1)

print(dp_numeric_diff(3.0).numpy()) # Prints -75300000.0
print(grad(3.0)[0].numpy())         # Prints -75279680.0

それがお役に立てば幸いです。

(これはGitHubでも尋ねられたようです

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Mathematicaが導関数に対して一見間違った答えを出すのはなぜですか?

分類Dev

なぜ私のコスト関数が間違った答えを出しているのですか?

分類Dev

Python 3.4が大きな数の除算に対して間違った答えを出すのはなぜですか?また、分割可能性をテストするにはどうすればよいですか?

分類Dev

これらのprint()呼び出しが間違った順序で実行されているように見えるのはなぜですか?

分類Dev

covariance2()が間違った答えを出しているのはなぜですか?

分類Dev

externを使用しているときに、間違ったシグネチャで関数を呼び出すことができるのはなぜですか?

分類Dev

日付フォーマット関数が間違った答えを返すのはなぜですか?

分類Dev

mysql timediff関数が間違った出力を出すのはなぜですか?

分類Dev

この合成関数が参照として渡されたときに、関数を間違った順序で適用するのはなぜですか?

分類Dev

私のコードが大きな数に対して間違った結果を与えるのはなぜですか?

分類Dev

Swiftでpowを使用して間違った答えが返されるのはなぜですか?

分類Dev

tensorflow api 2.0テンソルオブジェクトは、熱心な実行が有効になっている場合にのみ反復可能です。このテンソルを反復処理するには、tf.map_fnを使用します

分類Dev

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

分類Dev

同期ブロックが間違った答えを出すのはなぜですか?

分類Dev

平方根に対するこの再帰関数が間違った結果をもたらすのはなぜですか?

分類Dev

関数 `strtoll`が間違った値を与え、errnoを34に設定するのはなぜですか?

分類Dev

損失関数のTensorFlowベストプラクティスを(関数の形式で)呼び出すことができますか?熱心な実行の互換性以外の他の利点は?

分類Dev

matplotlibのmagnitude_spectrum関数が間違った大きさを示しているように見えるのはなぜですか?

分類Dev

引数を渡すプログラム、なぜこのプログラムは間違った答えを持っているのですか?

分類Dev

このJavaコードは正しいと見なされますが、間違った答えを出力するのはなぜですか?

分類Dev

ncharがRの大きな数値変数に対して間違った値を返すのはなぜですか?

分類Dev

熱心な実行関数への入力は、VariationalAutoencoderを使用したKerasシンボリックテンソルにすることはできません。

分類Dev

数値を使用した入力に対してこの関数が実際に入力type:numberでのみ機能しないのはなぜですか?

分類Dev

leetcodeが私のatoiの答えが正しくないと言っているのはなぜですか?それは実際に間違っていますか?またはリートコードにバグがありますか

分類Dev

このCコードで間違った答えが返されるのはなぜですか?

分類Dev

Optimizer.compute_gradientsに渡される `loss`は、熱心な実行が有効になっている場合の関数である必要があります

分類Dev

この階乗関数が間違った結果を返すのはなぜですか?

分類Dev

この再帰関数が間違った値を返すのはなぜですか?

分類Dev

INDEX / MATCH関数が間違った値を返すのはなぜですか?

Related 関連記事

  1. 1

    Mathematicaが導関数に対して一見間違った答えを出すのはなぜですか?

  2. 2

    なぜ私のコスト関数が間違った答えを出しているのですか?

  3. 3

    Python 3.4が大きな数の除算に対して間違った答えを出すのはなぜですか?また、分割可能性をテストするにはどうすればよいですか?

  4. 4

    これらのprint()呼び出しが間違った順序で実行されているように見えるのはなぜですか?

  5. 5

    covariance2()が間違った答えを出しているのはなぜですか?

  6. 6

    externを使用しているときに、間違ったシグネチャで関数を呼び出すことができるのはなぜですか?

  7. 7

    日付フォーマット関数が間違った答えを返すのはなぜですか?

  8. 8

    mysql timediff関数が間違った出力を出すのはなぜですか?

  9. 9

    この合成関数が参照として渡されたときに、関数を間違った順序で適用するのはなぜですか?

  10. 10

    私のコードが大きな数に対して間違った結果を与えるのはなぜですか?

  11. 11

    Swiftでpowを使用して間違った答えが返されるのはなぜですか?

  12. 12

    tensorflow api 2.0テンソルオブジェクトは、熱心な実行が有効になっている場合にのみ反復可能です。このテンソルを反復処理するには、tf.map_fnを使用します

  13. 13

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

  14. 14

    同期ブロックが間違った答えを出すのはなぜですか?

  15. 15

    平方根に対するこの再帰関数が間違った結果をもたらすのはなぜですか?

  16. 16

    関数 `strtoll`が間違った値を与え、errnoを34に設定するのはなぜですか?

  17. 17

    損失関数のTensorFlowベストプラクティスを(関数の形式で)呼び出すことができますか?熱心な実行の互換性以外の他の利点は?

  18. 18

    matplotlibのmagnitude_spectrum関数が間違った大きさを示しているように見えるのはなぜですか?

  19. 19

    引数を渡すプログラム、なぜこのプログラムは間違った答えを持っているのですか?

  20. 20

    このJavaコードは正しいと見なされますが、間違った答えを出力するのはなぜですか?

  21. 21

    ncharがRの大きな数値変数に対して間違った値を返すのはなぜですか?

  22. 22

    熱心な実行関数への入力は、VariationalAutoencoderを使用したKerasシンボリックテンソルにすることはできません。

  23. 23

    数値を使用した入力に対してこの関数が実際に入力type:numberでのみ機能しないのはなぜですか?

  24. 24

    leetcodeが私のatoiの答えが正しくないと言っているのはなぜですか?それは実際に間違っていますか?またはリートコードにバグがありますか

  25. 25

    このCコードで間違った答えが返されるのはなぜですか?

  26. 26

    Optimizer.compute_gradientsに渡される `loss`は、熱心な実行が有効になっている場合の関数である必要があります

  27. 27

    この階乗関数が間違った結果を返すのはなぜですか?

  28. 28

    この再帰関数が間違った値を返すのはなぜですか?

  29. 29

    INDEX / MATCH関数が間違った値を返すのはなぜですか?

ホットタグ

アーカイブ