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

Das Prinzip und die Python-Implementierung des Poolings

Nov 02, 2016 am 10:07 AM

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)
Nach dem Login kopieren

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.

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Apr 01, 2025 pm 10:51 PM

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Apr 01, 2025 pm 11:18 PM

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Apr 02, 2025 am 06:36 AM

Verwenden Sie Python im Linux -Terminal ...

See all articles