私は 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