web-dev-qa-db-ja.com

テンソルフローでreduce_sum()はどのように機能しますか?

私はテンソルフローを学んでいます。テンソルフローのウェブサイトから次のコードを選びました。私の理解では、axis = 0は行用で、axis = 1は列用です。

コメントに記載されている出力をどのように取得していますか?私は##に対する私の考えに応じて出力に言及しました。

import tensorflow as tf

x = tf.constant([[1, 1, 1], [1, 1, 1]])
tf.reduce_sum(x, 0)  # [2, 2, 2] ## [3, 3]
tf.reduce_sum(x, 1)  # [3, 3] ##[2, 2, 2]
tf.reduce_sum(x, [0, 1])  # 6 ## Didn't understood at all.
21

xの形状は_(2, 3)_(2行3列)です。

_1 1 1
1 1 1
_

tf.reduce_sum(x, 0)を実行すると、最初の次元(行)に沿ってテンソルが減少するため、結果は_[1, 1, 1] + [1, 1, 1] = [2, 2, 2]_になります。

tf.reduce_sum(x, 1)を実行すると、テンソルは2番目の次元(列)に沿って減少するため、結果は_[1, 1] + [1, 1] + [1, 1] = [3, 3]_になります。

tf.reduce_sum(x, [0, 1])を実行することにより、テンソルは両方の次元(行と列)に沿って縮小されるため、結果は_1 + 1 + 1 + 1 + 1 + 1 = 6_、または同等に_[1, 1, 1] + [1, 1, 1] = [2, 2, 2]_、そして_2 + 2 + 2 = 6_(reduce)行に沿って、結果の配列を減らします)。

38

入力は2次元テンソルです。

1 1 1
1 1 1

テンソルフローの0軸は行、1軸は列です。 0軸に沿った合計は、長さ3の1次元テンソルを生成します。各要素は列ごとの合計です。したがって、結果は[2, 2, 2]です。行についても同様です。

この場合、両方の軸に沿った合計は、テンソル内のすべての値の合計6です。

numpy との比較:

a = np.array([[1, 1, 1], [1, 1, 1]])
np.sum(a, axis=0)       # [2 2 2] 
np.sum(a, axis=1)       # [3 3]
np.sum(a, axis=(0, 1))  # 6

ご覧のとおり、出力は同じです。

22
Maxim

何が起こっているかをよりよく理解するために、値を変更します。結果は自明です

import tensorflow as tf

x = tf.constant([[1, 2, 4], [8, 16, 32]])
a = tf.reduce_sum(x, 0)  # [ 9 18 36]
b = tf.reduce_sum(x, 1)  # [ 7 56]
c = tf.reduce_sum(x, [0, 1])  # 63

with tf.Session() as sess:
  output_a = sess.run(a)
  print(output_a)
  output_b = sess.run(b)
  print(output_b)
  output_c = sess.run(c)
  print(output_c)
13
Enrique Ortuño

そのように考えると、軸は除去される次元を示します。したがって、最初のケースの軸0の場合、このディメンション(2エントリ)を通過すると、それらはすべて1になります。したがって、次のようになります。

result = [[1,1,1] + [1,1,1]] = [2,2,2] 

したがって、ディメンション0を削除しました。

次に、2番目の場合、軸1(または列)を折りたたみます。

result = [[1,1] + [1,1] + [1,1]] = [2,2]

最後のケースは、括弧内に示されている順序で折りたたんでいます。つまり、最初に行を削除してから列を削除します。

result1 = [2,2,2]
result_final = 2 + 2 + 2 = 6 

お役に立てれば!

4
asakryukin
tf.reduce_sum(x, [0, 1]) 

コマンドは、最初に軸全体の合計= 0(行方向)を計算し、次に軸全体の合計= 1(列方向)を計算します

例えば、

 x = tf.constant([[1, 1, 1], [1, 1, 1]])

軸の合計= 0を計算した後、[2,2,2]に合計します。軸の合計= 1を計算した後、2 + 2 + 2を合計します。

最後に、出力として6を取得します。

0
Ashiq Imran