Heim  >  Artikel  >  Backend-Entwicklung  >  Das Prinzip und die Python-Implementierung des Poolings

Das Prinzip und die Python-Implementierung des Poolings

高洛峰
高洛峰Original
2016-11-02 10:07:392463Durchsuche

In diesem Artikel werden zunächst die dem Pooling entsprechenden Vorgänge erläutert, dann einige der Prinzipien des Poolings analysiert und schließlich die Python-Implementierung des Poolings vorgestellt.

1. Operationen, die dem Pooling entsprechen

Bearbeiten Sie zunächst ein intuitives Konzept des Poolings als Ganzes (d. h. beschreiben Sie die Eingabe, Ausgabe und spezifischen Funktionen des Poolings, ignorieren Sie jedoch die spezifischen). Implementierungsdetails): Die Eingabe des Poolings ist eine Matrix, und die Ausgabe ist eine Matrix. Die abgeschlossene Funktion besteht darin, einen lokalen Bereich der Eingabematrix zu bearbeiten, sodass die Ausgabe, die dem Bereich entspricht, die Eigenschaften der Matrix am besten darstellen kann Bereich. Wie in Abbildung 1 dargestellt, stellt die gelbe Matrix im linken Bild die Eingabematrix dar, und die blaue Matrix im rechten Bild stellt die Ausgabematrix dar. Die dynamische orange Matrix stellt einen lokalen Bereich der ausgewählten Eingabematrix dar und findet dann der beste Vertreter des Gebiets, und schließlich werden alle ausgewählten Vertreter in der Ausgabematrix entsprechend der räumlichen Positionsbeziehung entsprechend der ursprünglichen Eingabematrix sortiert.

Dieser Prozess kann mit dem Wahlprozess verglichen werden. Wenn Sie den Bürgermeister von Peking wählen möchten, besteht ein praktikabler Ansatz darin, dass jeder Bezirk in Peking einen Vertreter auswählt, der den Interessen des Bezirks am besten entspricht, und dann entscheiden die gewählten Vertreter, wie der Bürgermeister von Peking ausgewählt wird. Wir hoffen natürlich, dass die von jedem Bezirk gewählten Vertreter die Interessen dieses Bezirks bestmöglich vertreten können. Um eine einfache Analogie zum Pooling zu ziehen: Die 〈-〉-Eingabematrix in Peking; die 〈-〉-Eingabematrix in anderen Bezirken; ist den Eigenschaften des Poolings sehr ähnlich).

Das Prinzip und die Python-Implementierung des Poolings

2. Der Grundgedanke hinter der Bündelung

Bei der Auswahl von Vertretern in einem lokalen Gebiet besteht unser allgemeiner Ansatz darin, die renommiertesten Vertreter in der Region auszuwählen Als Repräsentanten werden Personen eingesetzt (entsprechend Max-Pooling) oder Personen, die die allgemeinen Eigenschaften aller Personen im Bereich am besten repräsentieren können, als Repräsentanten ausgewählt (entsprechend Mean-Pooling). mit dem größten lokalen Flächenwert Der Gewinner ist der Repräsentant der Fläche bzw. der Durchschnitt aller Werte in der Fläche ist der Repräsentant der Fläche.

Wählen Sie die angesehenste Person in der Region als Vertreter aus oder wählen Sie als Vertreter die Person aus, die die allgemeinen Merkmale aller in der Region am besten repräsentiert. Die Vorteile sind:

1 ) Die angesehenste Person in einer Gegend sollte bei der Wahl des Bürgermeisters nicht voreingenommen sein, aber sie kann sich auf ihr hohes Alter verlassen und es versäumen, die Ansichten der breiten Öffentlichkeit in der Gegend (das örtliche Maximum) zu vertreten Wert ignoriert leicht die allgemeinen Merkmale des Gebiets)

2) Obwohl die Person, die die allgemeinen Merkmale aller Menschen in dem Gebiet am besten repräsentiert, aufgrund von die größten Rechte und Interessen aller Bewohner in dem Gebiet vertreten kann Aufgrund seiner begrenzten kognitiven Fähigkeiten (der lokale Mittelwert ist klein, daher sind seine kognitiven Fähigkeiten begrenzt) kann man bei der Wahl des Bürgermeisters leicht einen Fehler machen.

3) Wenn die Menschen in der Umgebung über ein gewisses Maß an Bewegungsfreiheit verfügen (entsprechend der Translations- und Rotationsinvarianz), hat dies grundsätzlich keinen Einfluss auf die beiden oben genannten Methoden zur Auswahl von Vertretern.

Formale Erklärung des Poolings

Nach relevanten Theorien: (1) Die Varianz des geschätzten Werts nimmt aufgrund der begrenzten Größe der Nachbarschaft zu; Der Fehler verursacht die Varianz des geschätzten mittleren Offsets. Im Allgemeinen kann Mean-Pooling den ersten Fehler reduzieren und mehr Hintergrundinformationen des Bildes behalten, während Max-Pooling den zweiten Fehler reduzieren und mehr Texturinformationen behalten kann.

Im Allgemeinen ist die Eingabedimension des Poolings hoch und die Ausgabedimension niedrig. Dies kann bis zu einem gewissen Grad als Dimensionsreduzierung verstanden werden. Wir können daraus schließen, dass der Dimensionsreduktionsprozess einige der wichtigsten Informationen der Eingabe weitgehend beibehält. Bei der tatsächlichen Anwendung des Poolings müssen wir eine detaillierte Analyse basierend auf den Merkmalen des tatsächlichen Problems durchführen. Wenn Sie erst einmal die Funktionsweise und das Prinzip des Poolings kennen und es gut mit spezifischen Problemen kombinieren, wird es ein guter Innovationspunkt sein, haha.

3. Python-Implementierung von Pooing

Einige Gedanken des Autors beim Schreiben von Code sind wie folgt: Der Kern besteht darin, ein komplexes Problem in ein Problem aufzuteilen, das direkt gelöst werden kann im Code implementiert. Frage:

1) Die Eingabematrix kann mxn oder mxnxp sein. Wenn Sie diese beiden Formen beim Schreiben von Code direkt berücksichtigen, wissen Sie nicht, wo Sie anfangen sollen (es gibt viele Situationen, die berücksichtigt werden müssen). , und mehrdimensionale Matrizen kann ich leicht selbst erstellen. Nach sorgfältiger Analyse habe ich festgestellt, dass, wenn ich das Pooling der MXN-Matrix umsetze, die MXNXP-Matrix einfach mithilfe der Implementierung der MXN-Matrix implementiert werden kann.

2) Bei der MXN-Matrix-Eingabe ist es möglich, dass das orangefarbene Kästchen in Abbildung 1 die Eingabematrix nicht genau abdecken kann, sodass die Eingabematrix erweitert werden muss. Die Erweiterung ist ebenfalls sehr einfach. Solange die dem letzten PoolStride entsprechende Poolgröße die Eingabematrix abdecken kann, können die anderen definitiv abgedeckt werden.

3) Schließlich führt die for-Schleife ähnliche Operationen aus.

def pooling(inputMap,poolSize=3,poolStride=2,mode='max'):
    """INPUTS:
              inputMap - input array of the pooling layer
              poolSize - X-size(equivalent to Y-size) of receptive field
              poolStride - the stride size between successive pooling squares
       
       OUTPUTS:
               outputMap - output array of the pooling layer
               
       Padding mode - 'edge'
    """
    # inputMap sizes
    in_row,in_col = np.shape(inputMap)
    
    # outputMap sizes
    out_row,out_col = int(np.floor(in_row/poolStride)),int(np.floor(in_col/poolStride))
    row_remainder,col_remainder = np.mod(in_row,poolStride),np.mod(in_col,poolStride)
    if row_remainder != 0:
        out_row +=1
    if col_remainder != 0:
        out_col +=1
    outputMap = np.zeros((out_row,out_col))
    
    # padding
    temp_map = np.lib.pad(inputMap, ((0,poolSize-row_remainder),(0,poolSize-col_remainder)), 'edge')
    
    # max pooling
    for r_idx in range(0,out_row):
        for c_idx in range(0,out_col):
            startX = c_idx * poolStride
            startY = r_idx * poolStride
            poolField = temp_map[startY:startY + poolSize, startX:startX + poolSize]
            poolOut = np.max(poolField)
            outputMap[r_idx,c_idx] = poolOut
    
    # retrun outputMap
    return  outputMap
# 测试实例
test = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
test_result = pooling(test, 2, 2, 'max')
print(test_result)

Testergebnisse:

Das Prinzip und die Python-Implementierung des Poolings

Zusammenfassung: Verstehen Sie zunächst den Input, Output und die Funktionen einer Technologie und suchen Sie dann nach ähnlichen Dingen in Lebensbeispielen; und schließlich die Technologie in erreichbare Schritte zerlegen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Python-NetzwerkprogrammierungNächster Artikel:Python-Netzwerkprogrammierung