Pomocou AveragePooling2D namiesto GlobalAveragePooling 2D nahradiť Hustých vrstiev po FCN pre klasifikáciu

0

Otázka

Môžem použiť k AveragePooling2D vrstva s pool_size rovná veľkosti extra mapu namiesto GlobalAveragePooling2D vrstvy? úlohou je nahradiť hustá vrstva po FCN. JE GlobalAveragePooling2D špeciálnym prípadom AveragePooling2D??

deep-learning keras tensorflow
2021-11-22 13:35:20
2

Najlepšiu odpoveď

2

GlobalAveragePooling2D bude prevzorkuje dole vstup, pričom priemerná hodnota spolu priestorových dimenzií, a vrátenie 1D výstup v predvolenom nastavení, ak nastavíte keepdims= True. AveragePooling2D aj downsamples vstup, ale berie priemerná hodnota za vstupné okno definovaná pool_size parameter. Tak, to sa vráti na 3D výstup:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

x = tf.reshape(x, [1, 3, 3, 1]) # Add batch dimension

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
   strides=(1, 1), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()
print(avg_pool_2d(x).shape)
print(avg_global_2d(x).shape)
(1, 2, 2, 1)
(1, 1)

Budete pravdepodobne musieť vyrovnať váš výstup z AveragePooling2D vrstva ak chcete kŕmiť ho na Dense vrstva neskôr:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

x = tf.reshape(x, [1, 3, 3, 1]) # Add batch dimension

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
   strides=(1, 1), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()
print(tf.keras.layers.Flatten()(avg_pool_2d(x)).shape)
print(avg_global_2d(x).shape)
(1, 4)
(1, 1)

Ak to nie je váš prípad, môžete nechať tak ako to je.

Aktualizácia: GlobalAveragePooling2D a AveragePooling2D niekedy sa správajú podobne, ak sa vám prispôsobí strides a pool_size parametre spôsobom:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

x = tf.reshape(x, [1, 3, 3, 1]) # Add batch dimension

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
   strides=(3, 3), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()

print(avg_pool_2d(x))
print(avg_global_2d(x))
tf.Tensor([[[[3.]]]], shape=(1, 1, 1, 1), dtype=float32)
tf.Tensor([[5.]], shape=(1, 1), dtype=float32)

Alebo

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(3, 3),
   strides=(2, 2), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()
tf.Tensor([[[[5.]]]], shape=(1, 1, 1, 1), dtype=float32)
tf.Tensor([[5.]], shape=(1, 1), dtype=float32)
2021-11-22 14:51:04

"x = Input(shape=(128,128,3))" po mnoho viac FCN vrstvy som si : "a = Conv2D(200 ,(1,1), padding = 'ten' , aktivácia='softmax', data_format = 'channels_last')(output_of_the_layer_before)' je posledný convolutional vrstva potom som si " b = Lambda(lambda x: squeeze(x, os=2))(AveragePooling2D(pool_size=(1, 128))(a)
DSPinterested

Funguje to úplne v poriadku, pre konkrétnu úlohu som, čo ma zaujímalo, že pomocou GlobalaveragePooling2D nemusí byť jediná možnosť je k dispozícii pre nahradenie hustých vrstvách aj s GlobalAveragePooling2D máte možnosť 'keepdims= True' alebo 'keepdims= False' , nemôžu zdieľať môj kód, dúfam, že to malo zmysel, aby ste
DSPinterested

Áno, to malo zmysel, aby ma.. ale čo presne je na svoju otázku teraz, alebo to, čo vy nie ste pochopiť?
AloneTogether

Ako pomocou AveragePooling2D vrstvy, ako je popísané vyššie vedie k takmer rovnakú klasifikáciu výsledkov ako GlobalAveragePooling2D! Zvyčajne v literatúre mám takmer vždy vidieť GlobalAveragePooling2D ako náhrada za Hustých vrstiev v FCN, ale nikdy som AveragePooling2D používa namiesto Hustá vrstva
DSPinterested

Aktualizované odpoveď, ale nemohli reprodukovať kód, ktorý ste pridali do komentárov.. prosím aktualizujte vašu otázku s príslušnými kód, výsledkom, a na vašu otázku.
AloneTogether

Celosvetový priemer združovania je nič zvláštne. Môžete použiť priemerný združením s filtrom veľkosť je rovnaká ako veľkosť textu a platné čalúnenia, potom je to presne to isté. Mohli by ste dokonca používať funkcie ako napr. tf.reduce_mean. Dôvod, nikto sa je to, že je to len spôsob, ako jednoduchšie použiť globálne združovania priamo...
xdurch0

@xdurch0 , dáva zmysel!
DSPinterested
0

Pridanie odpovede vyššie, celosvetový priemer združovania môže byť použitý pre prijatie premennej veľkosť snímky ako vstupy. Ak vstupný tvar pred globálne združovania sa (N,H,W,C) potom bude výstup (N,1,1,C) pre keras, keď keepdims=True. To je výstup snímky s rôznym (H,W) vyrobiť podobný tvar výstupy.

Odkazy:

2021-11-22 13:59:40

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................