[解決済み] np.meanとtf.reduce_meanの違いは何ですか?
質問
で 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.mean
と
tensorflow.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)
で平均値を上げることができます。
1
で
numpy
のように、当然ですが、tensorflowで行うには、その実行を
Session
を使用せずに
Session
ということができない。言い換えれば、計算するときに
tfMean = tf.reduce_mean(c)
そのとき、tensorflowはそれを計算しない。それは
Session
. しかし、numpy では、次のように記述すると、即座に計算されます。
np.mean()
.
意味がわかるといいのですが。
関連
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
Pythonによるjieba分割ライブラリ
-
Python 入出力と高次代入の基礎知識
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")