当前位置: 首页>>技术问答>>正文


Numpy的np.mean和和Tensorflow中tf.reduce_mean之间的区别?

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: 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.]

对于一维矢量,它看起来像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的功能是一样的。他们做同样的事情。从文档numpytensorflow,你可以看到。让我们通过一个例子来了解,

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操作。但是为了进行张量运算,必须在TensorflowSession内完成。你可以在这里阅读更多资料。也就是说,当你需要对张量流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)

我们可以自然地在numpy中增加1,但是为了在tensorflow中做同样的事情,需要在Session中执行,而不使用Session,无法这样做。换句话说,当你计算tfMean = tf.reduce_mean(c)时,tensorflow不会计算它。它只在会话中计算。但是当你写np.mean()时,numpy立即计算出来。

data

参考资料

本文由《纯净天空》出品。文章地址: https://vimsky.com/article/3746.html,未经允许,请勿转载。