1. ホーム
  2. python

[解決済み] np.meanとtf.reduce_meanの違いは何ですか?

2022-01-30 14:34:42

質問

MNISTビギナーズチュートリアル という記述があります。

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

tf.cast は基本的にオブジェクトが持つテンソルの種類を変更するものだが、その違いは何だろう? tf.reduce_mean np.mean ?

以下は、そのドキュメントです。 tf.reduce_mean :

reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)

input_tensor : 縮小するテンソル。数値型でなければならない。

reduction_indices : 縮小する寸法です。もし None (defaut)であれば、すべての次元を削減する。

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

1次元ベクトルの場合、次のようになります。 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 テンソルフロー ということがわかります。例を見てみましょう。

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) にわたって計算され、以下同様である。お分かりいただけただろうか。

さて、両者の違いは何でしょうか。

numpyの演算はpython上ならどこでも可能です。しかし、tensorflowの演算を行うには、tensorflowの内部で行う必要がある。 Session . 詳しくはこちら こちら . したがって、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)

で平均値を上げることができます。 1numpy のように、当然ですが、tensorflowで行うには、その実行を Session を使用せずに Session ということができない。言い換えれば、計算するときに tfMean = tf.reduce_mean(c) そのとき、tensorflowはそれを計算しない。それは Session . しかし、numpy では、次のように記述すると、即座に計算されます。 np.mean() .

意味がわかるといいのですが。