Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TensorFlow: questions regarding tf.argmax() and tf.equal()

I am learning the TensorFlow, building a multilayer_perceptron model. I am looking into some examples like the one at: https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/multilayer_perceptron.ipynb

I then have some questions in the code below:

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})) 

I am wondering what do tf.argmax(prod,1) and tf.argmax(y,1) mean and return (type and value) exactly? And is correct_prediction a variable instead of real values?

Finally, how do we get the y_test_prediction array (the prediction result when the input data is X_test) from the tf session? Thanks a lot!

like image 239
Edamame Avatar asked Jan 17 '17 23:01

Edamame


People also ask

What does TF Argmax return?

math. argmax. Returns the index with the largest value across axes of a tensor.

What is Argmax in keras?

Returns the index of the maximum value along an axis.

What is TF stack?

tf.stack( values, axis=0, name='stack' ) Defined in tensorflow/python/ops/array_ops.py. Stacks a list of rank- R tensors into one rank- (R+1) Packs the list of tensors in values into a tensor with rank one higher than each tensor in values , by packing them along the dimension.

What is TF Where?

tf. where will return the indices of condition that are non-zero, in the form of a 2-D tensor with shape [n, d] , where n is the number of non-zero elements in condition ( tf. count_nonzero(condition) ), and d is the number of axes of condition ( tf. rank(condition) ).


2 Answers

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

Returns the index with the largest value across axis of a tensor.

input is a Tensor and axis describes which axis of the input Tensor to reduce across. For vectors, use axis = 0.

For your specific case let's use two arrays and demonstrate this

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]]) 

Evaluating tf.argmax(pred, 1) gives a tensor whose evaluation will give array([5, 5, 2, 1, 3, 0])

Evaluating tf.argmax(y, 1) gives a tensor whose evaluation will give 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.  

Following our example, tf.equal(tf.argmax(pred, 1),tf.argmax(y, 1)) returns a tensor whose evaluation will givearray(1,1,1,1,1,1).

correct_prediction is a tensor whose evaluation will give a 1-D array of 0's and 1's

y_test_prediction can be obtained by executing pred = tf.argmax(logits, 1)

The documentation for tf.argmax and tf.equal can be accessed by following the links below.

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

like image 154
Ulrich.T Avatar answered Sep 28 '22 12:09

Ulrich.T


Reading the documentation:

tf.argmax

Returns the index with the largest value across axes of a tensor.

tf.equal

Returns the truth value of (x == y) element-wise.

tf.cast

Casts a tensor to a new type.

tf.reduce_mean

Computes the mean of elements across dimensions of a tensor.


Now you can easily explain what it does. Your y is one-hot encoded, so it has one 1 and all other are zero. Your pred represents probabilities of classes. So argmax finds the positions of best prediction and correct value. After that you check whether they are the same.

So now your correct_prediction is a vector of True/False values with the size equal to the number of instances you want to predict. You convert it to floats and take the average.


Actually this part is nicely explained in TF tutorial in the Evaluate the Model part

like image 41
Salvador Dali Avatar answered Sep 28 '22 11:09

Salvador Dali