What is the difference between np.mean and tf.reduce_mean?
In the MNIST beginner tutorial, there is the statement
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
Here is the doc on
reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)
input_tensor: The tensor to reduce. Should have numeric type.
reduction_indices: The dimensions to reduce. If
None(the defaut), reduces all dimensions.
> # 'x' is [[1., 1. ]] > # [2., 2.]] > tf.reduce_mean(x) ==> 1.5 > tf.reduce_mean(x, 0) ==> [1.5, 1.5] > tf.reduce_mean(x, 1) ==> [1., 2.] >
For a 1D vector, it looks like
np.mean == tf.reduce_mean, but I don't understand what's happening in
tf.reduce_mean(x, 1) ==> [1., 2.].
tf.reduce_mean(x, 0) ==> [1.5, 1.5] kind of makes sense, since mean of [1,2] and [1,2] are [1.5,1.5] but what's going on with
c = np.array([[3.,4], [5.,6], [6.,7]]) print(np.mean(c,1)) Mean = tf.reduce_mean(c,1) with tf.Session() as sess: result = sess.run(Mean) print(result)
[ 3.5 5.5 6.5] [ 3.5 5.5 6.5]
Here you can see that when
reduction_indices(tensorflow) is 1, it computes mean across (3,4) and (5,6) and (6,7), so
1 defines across which axis the mean is computed. When it is 0, the mean is computed across(3,5,6) and (4,6,7), and so on. I hope you get the idea.
Now what are the differences between them?
You can compute the numpy operation anywhere on python. But in order to do a tensorflow operation, it must be done inside a tensorflow
Session. You can read more about it here. So when you need to perform any computation for your tensorflow graph(or structure if you will), it must be done inside a tensorflow
Lets look at another example.
npMean = np.mean(c) print(npMean+1) tfMean = tf.reduce_mean(c) Add = tfMean + 1 with tf.Session() as sess: result = sess.run(Add) print(result)
We could increase mean by
numpy as you would naturally, but in order to do it in tensorflow, you need to perform that in
Session, without using
Session you can't do that. In other words, when you are computing
tfMean = tf.reduce_mean(c), tensorflow doesn't compute it then. It only computes that in a
Session. But numpy computes that instantly, when you write
I hope it makes sense.