Folosind AveragePooling2D în loc de GlobalAveragePooling 2D pentru a înlocui straturile Dense după o FCN pentru clasificare

0

Problema

Pot folosi un AveragePooling2D strat cu pool_size egală cu dimensiunea caracteristică hartă în loc de un GlobalAveragePooling2D strat? scopul este de a înlocui un strat dens după o FCN. ESTE GlobalAveragePooling2D un caz special de AveragePooling2D??

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

Cel mai bun răspuns

2

GlobalAveragePooling2D va downsample o intrare prin luarea valoarea medie a lungul dimensiuni spațiale și să se întoarcă un 1D ieșire în mod implicit, dacă nu ați setat keepdims= True. AveragePooling2D de asemenea, sub-eșantionează o intrare, dar are valoarea medie pe o fereastra de intrare definit de pool_size parametru. Deci, se va returna o ieșire 3D:

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)

Probabil că va trebui să aplatiza ieșire din AveragePooling2D strat dacă doriți să-l hrănească la un Dense strat după aceea:

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)

Dacă nu este cazul, puteți să-l lăsați așa cum este.

Update: GlobalAveragePooling2D și AveragePooling2D poate, uneori, se comportă în mod similar dacă reglați strides și pool_size în consecință parametrii:

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)

Sau

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(forma=(128,128,3))' după mai multe FCN straturi ajung la : 'o = Conv2D(200 ,(1,1), padding = 'același' , activare='softmax', data_format = 'channels_last')(output_of_the_layer_before)' este ultima convoluțional strat apoi fac 'b = Lambda(lambda x: stoarce(x, axa=2))(AveragePooling2D(pool_size=(1, 128))(o)
DSPinterested

Aceasta funcționează foarte bine pentru o anumită sarcină pe care o am, care ma făcut să mă întreb care utilizează GlobalaveragePooling2D ar putea să nu fie singura opțiune disponibilă pentru înlocuirea densa..., de asemenea, cu GlobalAveragePooling2D aveți opțiunea de a 'keepdims= True" sau "keepdims= False' , nu pot partaja codul meu, sper că acest lucru are sens pentru tine
DSPinterested

Da, avea sens pentru mine.. dar ce este mai exact intrebarea ta acum sau de ce nu înțelegi?!
AloneTogether

Cum, cu ajutorul AveragePooling2D strat de genul descris mai sus duce la aproape aceeași clasificare rezultate ca GlobalAveragePooling2D! De obicei, în literatura de specialitate nu au aproape întotdeauna văzut GlobalAveragePooling2D ca un înlocuitor pentru straturi Dense în FCN dar niciodată nu a văzut AveragePooling2D fi folosit în loc de un strat Dens
DSPinterested

Actualizat răspuns, dar nu a putut reproduce codul l-ați adăugat în comentarii.. vă rugăm să actualizați întrebare cu codul relevant, rezultatul, și întrebarea ta.
AloneTogether

Media globală comun este nimic special. Puteți utiliza medie comun cu filtru de dimensiune egală cu dimensiunea de intrare și valabil umplutură, atunci e exact la fel. Ai putea folosi chiar funcții, cum ar fi tf.reduce_mean. Motivul pentru care nimeni nu face acest lucru este că e mult mai ușor de utilizat global comun direct...
xdurch0

@xdurch0 , logic!
DSPinterested
0

Adăugând la răspunsul de mai sus, media globală comun pot fi utilizate pentru luarea de mărime variabilă imagini ca date de intrare. Dacă intrarea forma înainte global comun este (N,H,W,C) atunci ieșirea va fi (N,1,1,C) pentru keras când keepdims=True. Acest lucru face ca producția de imagini cu diferite (H,W) produce similare formă de ieșiri.

Referințe:

2021-11-22 13:59:40

În alte limbi

Această pagină este în alte limbi

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