当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Numpy和Tensorflow中np.mean和tf.reduce_mean的区别?》经验,为你挑选了2个好方法。

在MNIST初学者教程中,有tf.cast

tf.reduce_mean基本上改变了对象的张量类型,但是np.meantf.reduce_mean?之间有什么区别?

这是关于以下内容的文档reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None):

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

对于一维矢量,它看起来像input_tensor但我不明白发生了什么reduction_indices.None有道理,因为[1,2]和[1,2]的平均值是[1.5,1.5],但是发生了什么np.mean == tf.reduce_mean



1> Shubhashis..:

功能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操作.但是为了进行张量流操作,必须在张量流内完成Session.你可以在这里阅读更多相关信息.因此,当您需要对张量流图(或结构,如果愿意)执行任何计算时,必须在张量流内完成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)

我们可以通过增加平均1numpy,你会自然地,但为了做到这一点在tensorflow,您需要执行,在Session不使用Session你不能这样做.换句话说,当您进行计算时tfMean = tf.reduce_mean(c),tensorflow不会计算它.它只计算一个Session.但是当你写作时,numpy会立即计算出来np.mean().

我希望这是有道理的.


@Roman它是函数式编程的术语.你可以在这里阅读:http://www.python-course.eu/lambda.php
但**减少**部分**意味着什么**?

2> 小智..:

这里的关键是单词reduce,这是一个来自函数式编程的概念,它使得TensorFlow中的reduce_mean可以保持一批输入的计算结果的运行平均值.

如果您不熟悉函数式编程,这看起来很神秘.首先让我们看看减少的作用.如果给你一个像[1,2,5,4]这样的列表并且被告知要计算平均值,这很容易 - 只需将整个数组传递给np.mean即可得到均值.但是,如果你必须计算数字流的平均值呢?在这种情况下,您必须首先通过从流中读取来组装数组,然后在结果数组上调用np.mean - 您将不得不编写更多代码.

另一种方法是使用reduce范例.举个例子,看看如何在python中使用reduce来计算数字的总和: reduce(lambda x,y: x+y, [1,2,5,4]).

它的工作原理如下:

    第1步:从列表中读取2位数字 - 1,2.评估lambda 1,2.减少存储结果3.注意 - 这是从列表中读取2位数的唯一步骤

    步骤2:从列表中读取下一个数字 - 5.评估lambda 5,3(3是步骤1的结果,减少存储的数量).减少存储结果8.

    步骤3:从列表中读取下一个数字 - 4.评估lambda 8,4(8是步骤2的结果,减少存储的结果).减少存储结果12

    第4步:从列表中读取下一个数字 - 没有,所以返回存储的结果12.

阅读更多此处Python中的函数编程

要了解这如何应用于TensorFlow,请查看以下代码块,它定义了一个简单的图形,它接受一个浮点数并计算平均值.然而,图表的输入不是单个浮点数,而是浮点数组.reduce_mean计算所有浮点数的平均值.

import tensorflow as tf


inp = tf.placeholder(tf.float32)
mean = tf.reduce_mean(inp)

x = [1,2,3,4,5]

with tf.Session() as sess:
    print(mean.eval(feed_dict={inp : x}))

在计算批量图像的值时,此模式非常有用.看看Deep MNIST示例,您可以在其中看到如下代码:

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有