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

MNIST初学者教程中,有这样一个语句:

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' 是 [[1., 1.]]#         [2., 2.]]tf.reduce_mean(x) ==> 1.5tf.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操作。但要进行tensorflow操作,必须在tensorflow的Session中进行。你可以在这里阅读更多。所以当你需要为tensorflow图(或结构,如果你愿意的话)执行任何计算时,必须在tensorflow的Session中进行。

让我们看另一个例子。

npMean = np.mean(c)print(npMean+1)tfMean = tf.reduce_mean(c)Add = tfMean + 1with tf.Session() as sess:    result = sess.run(Add)    print(result)

我们可以在numpy中自然地将平均值增加1,但在tensorflow中,你需要在Session中执行这个操作,如果不使用Session,你就无法做到这一点。换句话说,当你计算tfMean = tf.reduce_mean(c)时,tensorflow并不会立即计算它。它只会在Session中计算。但numpy会在你写np.mean()时立即计算。

我希望这有意义。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注