Maxout Beschreibung und Implementierung (Python)

zunaechst

Dieser Artikel beschreibt Folgendes und implementiert die Maxout-Funktion in Python-Code.

  1. Was ist die Maxout-Funktion?
  2. Maxout-Funktionscode und Verwendung

In diesem Artikel wird die Maxout-Funktion implementiert, damit sie als Keras-Ebene verwendet werden kann. Der Code und die Beschreibung sind am Ende.

Was ist die Maxout-Funktion?

Die Maxout-Funktion wird als Schichtaktivierungsfunktion in Deep Learning-Modellen wie CNN und DNN verwendet. Der Hauptvorteil der Verwendung der Maxout-Funktion als Aktivierungsfunktion besteht darin, dass Sie Daten an die nächste Ebene übergeben können, ohne die Größe der von der vorherigen Ebene angegebenen Daten zu ändern.

Um dies zu erklären, verwenden CNNs und DNNs im Allgemeinen häufig eine Pooling-Schicht, um die Datengröße zu verringern, während die Maxout-Funktion die Anzahl der Dimensionen entsprechend der Anzahl der Kanäle verringert, anstatt die Größe zu verringern. Ich mache. Dies macht die Verwendung der Pooling-Ebene unnötig und wird verwendet, wenn Sie die Größe der Daten in der Ebene so weit wie möglich beibehalten möchten. (Tatsächlich wird es in der CNN-Schicht verwendet und häufig in Kombination mit der Pooling-Schicht verwendet.)

Die Maxout-Funktion kann wie folgt ausgedrückt werden, wenn sie in eine mathematische Formel geschrieben wird. スクリーンショット 2020-06-13 21.28.40.png

Was die Maxout-Funktion tatsächlich tut, ist, das Maximum der Pixel zu nehmen, die sich in jeder Dimension (Kanal, Feature-Map) an derselben Stelle befinden, und dieses als Pixel der Ausgabedaten zu verwenden. Das Bild unten sieht aus wie in der Abbildung unten.

40537_2019_233_Fig2_HTML.png

Reference https://www.google.com/url?sa=i&url=https%3A%2F%2Flink.springer.com%2Farticle%2F10.1186%2Fs40537-019-0233-0&psig=AOvVaw2-jjWv_TTq3t2bz_Py6_S0&ust=1592137921627000&source=images&cd=vfe&ved=0CA0QjhxqFwoTCOiAvJDm_ukCFQAAAAAdAAAAABAD

Wenn Sie es tatsächlich als Code implementieren, können Sie die Anzahl der Dimensionen nach der Ausgabe angeben. Beispielsweise sei die Anzahl der Ausgangsdimensionen 2 und die Anzahl der Eingangsdimensionen N. In diesem Fall werden die Eingabedaten in zwei n / 2-dimensionale Blöcke unterteilt, und für jeden wird Maxout ausgeführt.

image.png

Implementierung als Keras-Schicht

Implementieren Sie wie folgt. Es wurde bestätigt, dass es sowohl mit Tensorflow 2 als auch mit Tensorflow 2 funktioniert.

Maxout.py



import tensorflow as tf
from typeguard import typechecked
import keras

class Maxout(keras.layers.Layer):
    #num_Geben Sie die Anzahl der Dimensionen nach der Ausgabe mit dem Gerät an
    #Geben Sie die Achse an, für die Sie Max mit Achse nehmen möchten (normalerweise der Standardwert. Geben Sie für Kanal zuerst 1 an.)
    @typechecked
    def __init__(self, num_units: int, axis: int = -1, **kwargs):
        super().__init__(**kwargs)
        self.num_units = num_units
        self.axis = axis

    def call(self, inputs):
        inputs = tf.convert_to_tensor(inputs)
        shape = inputs.get_shape().as_list()
        # Dealing with batches with arbitrary sizes
        for i in range(len(shape)):
            if shape[i] is None:
                shape[i] = tf.shape(inputs)[i]

        num_channels = shape[self.axis]
        if not isinstance(num_channels, tf.Tensor) and num_channels % self.num_units:
            raise ValueError(
                "number of features({}) is not "
                "a multiple of num_units({})".format(num_channels, self.num_units)
            )

        if self.axis < 0:
            axis = self.axis + len(shape)
        else:
            axis = self.axis
        assert axis >= 0, "Find invalid axis: {}".format(self.axis)

        expand_shape = shape[:]
        expand_shape[axis] = self.num_units
        k = num_channels // self.num_units
        expand_shape.insert(axis, k)

        outputs = tf.math.reduce_max(
            tf.reshape(inputs, expand_shape), axis, keepdims=False
        )
        return outputs

    def compute_output_shape(self, input_shape):
        input_shape = tf.TensorShape(input_shape).as_list()
        input_shape[self.axis] = self.num_units
        return tf.TensorShape(input_shape)

    def get_config(self):
        config = {"num_units": self.num_units, "axis": self.axis}
        base_config = super().get_config()
        return {**base_config, **config}

Ein Anwendungsbeispiel ist unten dargestellt. Wenn Sie es so nennen, wird es funktionieren.

example.py



from Maxout import Maxout

conv2d = Conv2D(64, kernel_size, strides, padding)(input)
maxout = Maxout(n_units)(conv2d)

abschließend

Dieses Mal habe ich die Maxout-Funktion erklärt. Maxout wird in neueren Studien häufig als Aktivierungsfunktion für LCNN usw. verwendet. Ich hoffe, Sie finden diesen Artikel hilfreich.

Reference Maxout Networks (https://arxiv.org/pdf/1302.4389.pdf) A Light CNN for Deep Face Representation with Noisy Labels (https://arxiv.org/pdf/1511.02683.pdf)

Recommended Posts

Maxout Beschreibung und Implementierung (Python)
Sortieralgorithmus und Implementierung in Python
Warteschlangen- und Python-Implementierungsmodul "deque"
Python-Datenstruktur und interne Implementierung ~ Liste ~
TRIE-Baumimplementierung mit Python und LOUDS
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
[Python] Komprimieren und dekomprimieren
Python- und Numpy-Tipps
[Python] Pip und Wheel
RNN-Implementierung in Python
ValueObject-Implementierung in Python
Python Iterator und Generator
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Ruby, Python und Map
Python-Eingabe und Ausgabe
Python und Ruby teilen sich
Perceptron Grundlagen und Implementierung
Python asyncio und ContextVar
SVM-Implementierung in Python
Führen Sie die Sortierimplementierung / Berechnungsmengenanalyse zusammen und experimentieren Sie in Python
[# 2] Mach Minecraft mit Python. ~ Modellzeichnung und Player-Implementierung ~
In der Ehe erlernte logische Symbole (und Implementierungsbeispiele in Python)
Unterschied zwischen return, return None und no return description in Python
Programmieren mit Python und Tkinter
Python-Implementierung des CSS3-Mischmodus und Diskussion über den Farbraum
Ver- und Entschlüsselung mit Python
Python: Klassen- und Instanzvariablen
3-3, Python-Zeichenfolge und Zeichencode
Python und Hardware-Verwenden von RS232C mit Python-
Python auf Ruby und wütend Ruby auf Python
Python-Einzug und String-Format
Python Real Number Division (/) und Integer Division (//)
Installieren Sie Python und Flask (Windows 10)
Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
Apache mod_auth_tkt und Python AuthTkt
Å (Ongustorome) und NFC @ Python
[Line / Python] Beacon-Implementierungsnotiz
Lernen Sie Python-Pakete und -Module kennen
# 2 [python3] Trennung und Kommentar aus
Flache Python-Kopie und tiefe Kopie
Python und Ruby Slice Memo
Erklärung und Implementierung von SocialFoceModel
Python-Installation und grundlegende Grammatik
Normalisierung der Strömungstheorie und -implementierung
Ich habe Java und Python verglichen!
Flache Python-Kopie und tiefe Kopie
Über Python, len () und randint ()
Installieren Sie Python 3.7 und Django 3.0 (CentOS)
Python-Klassen- und Instanzvariablen
Ruby- und Python-Syntax ~ branch ~
[Python] Python und Sicherheit - is Was ist Python?
Stapel und Warteschlange in Python
Python-Metaklasse und SQLalchemie deklarativ
Implementierung von Fibonacci und Primzahlen (Python)
Python-Implementierung des Partikelfilters
Python-Grundlagen: Bedingungen und Iterationen