web-dev-qa-db-ja.com

TensorFlow:tf.argmax()およびtf.equal()に関する質問

TensorFlowを学習し、layer_perceptronモデルを構築しています。次のような例を探しています: https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/multilayer_perceptron.ipynb

次に、以下のコードにいくつか質問があります。

def multilayer_perceptron(x, weights, biases):
    :
    :

pred = multilayer_perceptron(x, weights, biases)
    :
    :

with tf.Session() as sess:
    sess.run(init)
         :
    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))

    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    print ("Accuracy:", accuracy.eval({x: X_test, y: y_test_onehot}))

tf.argmax(prod,1)tf.argmax(y,1)はどういう意味で、(型と値)を正確に返しますか? correct_predictionは実際の値ではなく変数ですか?

最後に、tfセッションからy_test_prediction配列(入力データがX_testの場合の予測結果)を取得するにはどうすればよいですか?どうもありがとう!

30
Edamame
tf.argmax(input, axis=None, name=None, dimension=None)

テンソルの軸全体で最大値を持つインデックスを返します。

入力はテンソルであり、軸は入力テンソルのどの軸を横切るかを示します。ベクトルの場合、axis = 0を使用します。

特定のケースでは、2つの配列を使用してこれを実証しましょう

pred = np.array([[31, 23,  4, 24, 27, 34],
                [18,  3, 25,  0,  6, 35],
                [28, 14, 33, 22, 20,  8],
                [13, 30, 21, 19,  7,  9],
                [16,  1, 26, 32,  2, 29],
                [17, 12,  5, 11, 10, 15]])

y = np.array([[31, 23,  4, 24, 27, 34],
                [18,  3, 25,  0,  6, 35],
                [28, 14, 33, 22, 20,  8],
                [13, 30, 21, 19,  7,  9],
                [16,  1, 26, 32,  2, 29],
                [17, 12,  5, 11, 10, 15]])

tf.argmax(pred, 1)を評価すると、その評価がarray([5, 5, 2, 1, 3, 0])を与えるテンソルが得られます

tf.argmax(y, 1)を評価すると、その評価がarray([5, 5, 2, 1, 3, 0])を与えるテンソルが得られます

tf.equal(x, y, name=None) takes two tensors(x and y) as inputs and returns the truth value of (x == y) element-wise. 

この例に従って、tf.equal(tf.argmax(pred, 1),tf.argmax(y, 1))は、評価がarray(1,1,1,1,1,1)を与えるテンソルを返します。

correct_predictionはテンソルで、その評価により0と1の1次元配列が得られます

y_test_predictionは、pred = tf.argmax(logits, 1)を実行することで取得できます

Tf.argmaxおよびtf.equalのドキュメントには、以下のリンクからアクセスできます。

tf.argmax() https://www.tensorflow.org/api_docs/python/math_ops/sequence_comparison_and_indexing#argmax

tf.equal() https://www.tensorflow.org/versions/master/api_docs/python/control_flow_ops/comparison_operators#equal

42
Ulrich.T

ドキュメントを読む:

tf.argmax

テンソルの軸全体で最大値を持つインデックスを返します。

tf.equal

(x == y)の要素ごとの真理値を返します。

tf.cast

テンソルを新しい型にキャストします。

tf.reduce_mean

テンソルの次元全体の要素の平均を計算します。


これで、その機能を簡単に説明できます。 yはワンホットエンコードされているため、1が1で、その他はすべてゼロです。 predは、クラスの確率を表します。したがって、argmaxは最適な予測と正しい値の位置を見つけます。その後、それらが同じかどうかを確認します。

したがって、correct_predictionは、予測するインスタンスの数に等しいサイズのTrue/False値のベクトルになります。あなたはそれをフロートに変換し、平均を取る。


実際、この部分は、モデルの評価部分の TFチュートリアル でうまく説明されています

15
Salvador Dali

tf.argmax(input、axis = None、name = None、dimension = None)

テンソルの軸全体で最大値を持つインデックスを返します。

特定のケースでは、predの引数としてinputaxisとして1を受け取ります。軸は、入力Tensorのどの軸を横切るかを示します。ベクトルの場合、axis = 0を使用します。

例:与えられたリスト[2.11,1.0021,3.99,4.32] argmaxは、最高値のインデックスである3を返します。


correct_predictionは、後で評価されるテンソルです。通常のpython変数ではありません。後で値を計算するために必要な情報が含まれています。この特定のケースでは、それは別のテンソルaccuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))の一部となり、accuracy.eval({x: X_test, y: y_test_onehot})上のevalによって評価されます。


y_test_predictionは、correct_predictionテンソルでなければなりません。

1
BernardoGO