Python - n テンソルの平均を求めるにはどうすればよいですか?それらを合計し、結果を N で割ります。同じ形状のテンソルを取得します。

okwaves2024-01-25  8

私は Python 3.7.7 を使用しています。および Tensorflow 2.1.0。

私は初心者です。

形状 (1, 12, 12, 512) を持つ N 個のテンソルがあり、各配列を合計して同じ形状 (1, 12, 12, 512) のテンソルを取得したいと考えています。そして、それを N で割ります。

これらのテンソルは、次の概要を持つエンコーダーからの出力です。

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 200, 200, 1)]     0         
_________________________________________________________________
conv1_1 (Conv2D)             (None, 200, 200, 64)      1664      
_________________________________________________________________
conv1_2 (Conv2D)             (None, 200, 200, 64)      102464    
_________________________________________________________________
pool1 (MaxPooling2D)         (None, 100, 100, 64)      0         
_________________________________________________________________
conv2_1 (Conv2D)             (None, 100, 100, 96)      55392     
_________________________________________________________________
conv2_2 (Conv2D)             (None, 100, 100, 96)      83040     
_________________________________________________________________
pool2 (MaxPooling2D)         (None, 50, 50, 96)        0         
_________________________________________________________________
conv3_1 (Conv2D)             (None, 50, 50, 128)       110720    
_________________________________________________________________
conv3_2 (Conv2D)             (None, 50, 50, 128)       147584    
_________________________________________________________________
pool3 (MaxPooling2D)         (None, 25, 25, 128)       0         
_________________________________________________________________
conv4_1 (Conv2D)             (None, 25, 25, 256)       295168    
_________________________________________________________________
conv4_2 (Conv2D)             (None, 25, 25, 256)       1048832   
_________________________________________________________________
pool4 (MaxPooling2D)         (None, 12, 12, 256)       0         
_________________________________________________________________
conv5_1 (Conv2D)             (None, 12, 12, 512)       1180160   
_________________________________________________________________
conv5_2 (Conv2D)             (None, 12, 12, 512)       2359808   
=================================================================
Total params: 5,384,832
Trainable params: 5,384,832
Non-trainable params: 0
_________________________________________________________________
None

エンコンダーと出力を取得するコードは次のとおりです。

u_net: Model = utils.get_unet_uncompiled(img_shape = (200, 200, 1))

encoder = Model(inputs=u_net.layers[0].input, outputs=u_net.layers[14].output, name='encoder')

print(encoder.summary())

brain_img = dataset[:, 0, :][28][:, :, 0]

b = np.expand_dims(brain_img, axis=0)
x = np.expand_dims(b, axis=-1)


# Input image must have the same shape than U-Net.
y = encoder(x)

print("Y shape: ", y.shape)
print("Y type: ", type(y))

印刷出力は次のようになります:

Y shape:  (1, 12, 12, 512)
Y type:  <class 'tensorflow.python.framework.ops.EagerTensor'>

検索しましたが、tf.math.reduce_mean しか見つかりませんでした。これでは私がやりたいことを実行できないと思います。

どうすればよいでしょうか?

更新:

tf.math.add_n を使用してすべてのテンソルを合計し、結果のテンソルを N で割ることができると思います。しかし、確信はありません。



------------------------

軸 0 ごとの平均を探しているだけのようですか?

import tensorflow as tf

x = tf.random.uniform((100, 12, 12, 512), 0, 1, dtype=tf.int32)

tf.reduce_mean(x, axis=0, keepdims=True)

結果の形状:

TensorShape([1, 12, 12, 512])

形状 (1、12、12、512) のテンソルのリストを扱っている場合も、同じです。

x = [tf.random.uniform((1, 12, 12, 512), 0, 1, dtype=tf.int32) for i in range(10)]

tf.reduce_mean(x, axis=0)
TensorShape([1, 12, 12, 512])

5

ありがとうございます。でも、あなたの答えはわかりません。 (1, 12, 12, 512) + (1, 12, 12, 512) + (1, 12, 12, 512) + (1, 12, 12, 512) + ... + (1, 12、12、512)。 (100, 12, 12, 512) はありません。変換する必要がありますか?N テンソルから (100, 12, 12, 512)?ありがとう。

– バンズファンネル

2020 年 9 月 4 日 5:03

テンソルがどのようになっているのか説明していただけますか?形状の異なる変数 (1、12、12、512) のようなものでしょうか?これはリストですか?何をしても同じ操作です。アップデートを参照してください。

– ニコラ・ジェルヴェ

2020 年 9 月 4 日 10:42

B 形状と X 形状は重要ですか?形状 (1、12、12、512) を持つテンソルのコレクションがどこにあるのかまだわかりません。 y に 1 つ割り当てられているようですが、それだけです。 tf.random.normal または Numpy を使用して自由にデータを生成してください

– ニコラ・ジェルヴェ

2020 年 9 月 4 日 11:27

これは、これらのテンソルが何であるかについての単なる例です。これらは y と同じ型、同じ形状を持っていますが、例として 1 つだけ示します。 B と x は重要ではありません。おそらくアップデートは機能するでしょう。ありがとうございました。

– バンズファンネル

2020 年 9 月 4 日 12:34

それでは、お知らせします。

– ニコラ・ジェルヴェ

2020 年 9 月 4 日 17:44

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。