當前位置: 首頁>>技術問答>>正文


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/zh-tw/article/3746.html,未經允許,請勿轉載。