私はテンソルフローを学んでいます。テンソルフローのウェブサイトから次のコードを選びました。私の理解では、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.
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)行に沿って、結果の配列を減らします)。
入力は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
ご覧のとおり、出力は同じです。
何が起こっているかをよりよく理解するために、値を変更します。結果は自明です
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)
そのように考えると、軸は除去される次元を示します。したがって、最初のケースの軸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
お役に立てれば!
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を取得します。