np.mean和tf.reduce_mean有什么区别? - python

在MNIST beginner tutorial中,有一条语句

accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

tf.cast基本上改变了对象的张量类型,但是 tf.reduce_meannp.mean 有什么区别?

这是 tf.reduce_mean 上的文档:

reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)
input_tensor:要减少的张量。应为数字类型。

reduction_indices:要减小的尺寸。如果是None(默认值),请减小所有尺寸。

# '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.]

对于一维矢量,它看起来像np.mean == tf.reduce_mean,但我不了解tf.reduce_mean(x, 1) ==> [1., 2.]中发生了什么。 tf.reduce_mean(x, 0) ==> [1.5, 1.5]之所以有意义,是因为[1, 2][1, 2]的均值是[1.5, 1.5],但是tf.reduce_mean(x, 1)怎么了?

参考方案

numpy.meantensorflow.reduce_mean的功能相同。他们做同样的事情。从文档中,您可以看到numpy和tensorflow。让我们看一个例子,

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]

在这里您可以看到axis(numpy)或reduction_indices(tensorflow)为1时,它将计算(3,4)和(5,6)和(6,7)的均值,因此1定义了在哪个轴上计算均值。当它为0时,将通过(3,5,6)和(4,6,7)计算平均值,依此类推。希望您能明白。
现在它们之间有什么区别?
您可以在python的任何位置计算numpy操作。但是为了进行张量流操作,必须在tensorflow Session内部完成。您可以阅读有关它的更多信息here。因此,当您需要对tensorflow图(或结构)进行任何计算时,必须在tensorflow Session内部进行。
让我们看另一个例子。

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)

我们可以自然而然地在1中增加numpy的均值,但是要在tensorflow中做到这一点,您需要在Session中执行,而不能使用Session则无法做到这一点。换句话说,当您计算tfMean = tf.reduce_mean(c)时,tensorflow不会对其进行计算。它仅以Session进行计算。但是,当您编写np.mean()时,numpy会立即进行计算。
我希望这是有道理的。

45码