Keras - Ebenen
Wie bereits erwähnt, sind Keras-Ebenen der Hauptbaustein von Keras-Modellen. Jede Schicht empfängt Eingabeinformationen, führt einige Berechnungen durch und gibt schließlich die transformierten Informationen aus. Die Ausgabe einer Ebene fließt als Eingabe in die nächste Ebene. In diesem Kapitel erfahren Sie alles über Ebenen.
Einführung
Eine Keras-Ebene erfordert shape of the input (input_shape) um die Struktur der Eingabedaten zu verstehen, initializerum das Gewicht für jeden Eingang festzulegen und schließlich Aktivatoren, um den Ausgang so zu transformieren, dass er nicht linear ist. Dazwischen beschränken Einschränkungen den Bereich, in dem das Gewicht der zu generierenden Eingabedaten und des Regularisierers versucht, die Ebene (und das Modell) zu optimieren, indem sie die Strafen während des Optimierungsprozesses dynamisch auf die Gewichte anwenden.
Zusammenfassend erfordert die Keras-Ebene unter den Mindestdetails, um eine vollständige Ebene zu erstellen.
- Form der Eingabedaten
- Anzahl der Neuronen / Einheiten in der Schicht
- Initializers
- Regularizers
- Constraints
- Activations
Lassen Sie uns das Grundkonzept im nächsten Kapitel verstehen. Bevor wir das Grundkonzept verstehen, erstellen wir eine einfache Keras-Ebene mithilfe der sequentiellen Modell-API, um eine Vorstellung davon zu erhalten, wie das Keras-Modell und die Ebene funktionieren.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
from keras import regularizers
from keras import constraints
model = Sequential()
model.add(Dense(32, input_shape=(16,), kernel_initializer = 'he_uniform',
kernel_regularizer = None, kernel_constraint = 'MaxNorm', activation = 'relu'))
model.add(Dense(16, activation = 'relu'))
model.add(Dense(8))
wo,
Line 1-5 importiert die erforderlichen Module.
Line 7 Erstellt ein neues Modell mithilfe der sequentiellen API.
Line 9 schafft eine neue Dense Ebene und fügen Sie es in das Modell. Denseist eine von Keras bereitgestellte Einstiegsschicht, die die Anzahl der Neuronen oder Einheiten (32) als erforderlichen Parameter akzeptiert. Wenn die Schicht die erste Schicht ist, müssen wir bereitstellenInput Shape, (16,)auch. Andernfalls wird die Ausgabe der vorherigen Ebene als Eingabe der nächsten Ebene verwendet. Alle anderen Parameter sind optional.
Der erste Parameter gibt die Anzahl der Einheiten (Neuronen) an.
input_shape repräsentieren die Form der Eingabedaten.
kernel_initializer den zu verwendenden Initialisierer darstellen. he_uniform Funktion wird als Wert gesetzt.
kernel_regularizer vertreten regularizerbenutzt werden. Keiner ist als Wert festgelegt.
kernel_constraint die zu verwendende Einschränkung darstellen. MaxNorm Funktion wird als Wert gesetzt.
activationdie zu verwendende Aktivierung darstellen. Die Relu-Funktion wird als Wert festgelegt.
Line 10 schafft zweite Dense Schicht mit 16 Einheiten und setzen relu als Aktivierungsfunktion.
Line 11 Erstellt die letzte dichte Ebene mit 8 Einheiten.
Grundkonzept von Ebenen
Lassen Sie uns das Grundkonzept der Ebene sowie die Unterstützung der einzelnen Konzepte durch Keras verstehen.
Form eingeben
Beim maschinellen Lernen werden alle Arten von Eingabedaten wie Text, Bilder oder Videos zuerst in eine Reihe von Zahlen konvertiert und dann in den Algorithmus eingespeist. Eingabenummern können ein eindimensionales Array, ein zweidimensionales Array (Matrix) oder ein mehrdimensionales Array sein. Wir können die Dimensionsinformationen mit angebenshape, ein Tupel von ganzen Zahlen. Zum Beispiel,(4,2) stellen Matrix mit vier Zeilen und zwei Spalten dar.
>>> import numpy as np
>>> shape = (4, 2)
>>> input = np.zeros(shape)
>>> print(input)
[
[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]
]
>>>
Ähnlich, (3,4,2) dreidimensionale Matrix mit drei Sammlungen von 4x2-Matrix (zwei Zeilen und vier Spalten).
>>> import numpy as np
>>> shape = (3, 4, 2)
>>> input = np.zeros(shape)
>>> print(input)
[
[[0. 0.] [0. 0.] [0. 0.] [0. 0.]]
[[0. 0.] [0. 0.] [0. 0.] [0. 0.]]
[[0. 0.] [0. 0.] [0. 0.] [0. 0.]]
]
>>>
Um die erste Ebene des Modells (oder die Eingabeebene des Modells) zu erstellen, sollte die Form der Eingabedaten angegeben werden.
Initialisierer
Beim maschinellen Lernen werden alle Eingabedaten gewichtet. InitializersDas Modul bietet verschiedene Funktionen zum Einstellen dieses Anfangsgewichts. Manche derKeras Initializer Funktion sind wie folgt -
Nullen
Erzeugt 0 für alle Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Zeros()
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
Wo, kernel_initializer stellen den Initialisierer für den Kernel des Modells dar.
Einsen
Erzeugt 1 für alle Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Ones()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
Konstante
Erzeugt einen konstanten Wert (z. 5) vom Benutzer für alle Eingabedaten angegeben.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Constant(value = 0) model.add(
Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)
wo, value repräsentieren den konstanten Wert
RandomNormal
Erzeugt einen Wert unter Verwendung der Normalverteilung der Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.RandomNormal(mean=0.0,
stddev = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
wo,
mean stellen den Mittelwert der zu generierenden Zufallswerte dar
stddev stellen die Standardabweichung der zu erzeugenden Zufallswerte dar
seed stellen die Werte dar, um eine Zufallszahl zu erzeugen
RandomUniform
Generiert Wert durch gleichmäßige Verteilung der Eingabedaten.
from keras import initializers
my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
wo,
minval stellen die Untergrenze der zu generierenden Zufallswerte dar
maxval stellen die Obergrenze der zu generierenden Zufallswerte dar
TruncatedNormal
Erzeugt einen Wert unter Verwendung einer abgeschnittenen Normalverteilung der Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.TruncatedNormal(mean = 0.0, stddev = 0.05, seed = None
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
Varianzskalierung
Erzeugt einen Wert basierend auf der Eingabe- und Ausgabeform der Ebene zusammen mit der angegebenen Skalierung.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.VarianceScaling(
scale = 1.0, mode = 'fan_in', distribution = 'normal', seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
skernel_initializer = my_init))
wo,
scale repräsentieren den Skalierungsfaktor
mode repräsentieren einen von fan_in, fan_out und fan_avg Werte
distribution repräsentieren eines von normal oder uniform
Varianzskalierung
Es findet das stddev Wert für die Normalverteilung unter Verwendung der folgenden Formel und dann die Gewichte unter Verwendung der Normalverteilung finden,
stddev = sqrt(scale / n)
wo n vertreten,
Anzahl der Eingabeeinheiten für mode = fan_in
Anzahl der Out-Einheiten für mode = fan_out
durchschnittliche Anzahl der Ein- und Ausgabeeinheiten für mode = fan_avg
In ähnlicher Weise wird die Grenze für die gleichmäßige Verteilung unter Verwendung der folgenden Formel ermittelt und dann die Gewichte unter Verwendung der gleichmäßigen Verteilung ermittelt.
limit = sqrt(3 * scale / n)
lecun_normal
Erzeugt einen Wert unter Verwendung der Lecun-Normalverteilung der Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
Es findet das stddev Verwenden Sie die folgende Formel und wenden Sie dann die Normalverteilung an
stddev = sqrt(1 / fan_in)
wo, fan_in stellen die Anzahl der Eingabeeinheiten dar.
lecun_uniform
Erzeugt einen Wert unter Verwendung der Lecun-Gleichverteilung der Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.lecun_uniform(seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
Es findet das limit Verwenden Sie die folgende Formel und wenden Sie dann eine gleichmäßige Verteilung an
limit = sqrt(3 / fan_in)
wo,
fan_in repräsentiert die Anzahl der Eingabeeinheiten
fan_out repräsentiert die Anzahl der Ausgabeeinheiten
glorot_normal
Erzeugt einen Wert unter Verwendung der Glorot-Normalverteilung der Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.glorot_normal(seed=None) model.add(
Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)
Es findet das stddev Verwenden Sie die folgende Formel und wenden Sie dann die Normalverteilung an
stddev = sqrt(2 / (fan_in + fan_out))
wo,
fan_in repräsentiert die Anzahl der Eingabeeinheiten
fan_out repräsentiert die Anzahl der Ausgabeeinheiten
glorot_uniform
Erzeugt einen Wert unter Verwendung einer gleichmäßigen Verteilung der Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.glorot_uniform(seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
Es findet das limit Verwenden Sie die folgende Formel und wenden Sie dann eine gleichmäßige Verteilung an
limit = sqrt(6 / (fan_in + fan_out))
wo,
fan_in stellen die Anzahl der Eingabeeinheiten dar.
fan_out repräsentiert die Anzahl der Ausgabeeinheiten
he_normal
Erzeugt einen Wert unter Verwendung der Normalverteilung der Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
Es findet das stddev unter Verwendung der folgenden Formel und wendet dann die Normalverteilung an.
stddev = sqrt(2 / fan_in)
wo, fan_in stellen die Anzahl der Eingabeeinheiten dar.
he_uniform
Generiert Wert durch gleichmäßige Verteilung der Eingabedaten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.he_normal(seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
Es findet das limit Verwenden Sie die folgende Formel und wenden Sie dann eine gleichmäßige Verteilung an.
limit = sqrt(6 / fan_in)
wo, fan_in stellen die Anzahl der Eingabeeinheiten dar.
Senkrecht
Erzeugt eine zufällige orthogonale Matrix.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Orthogonal(gain = 1.0, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
wo, gain repräsentieren den Multiplikationsfaktor der Matrix.
Identität
Erzeugt eine Identitätsmatrix.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Identity(gain = 1.0) model.add(
Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)
Einschränkungen
Beim maschinellen Lernen wird während der Optimierungsphase eine Einschränkung für den Parameter (Gewicht) festgelegt. Das Modul <> Einschränkungen bietet verschiedene Funktionen zum Festlegen der Einschränkung für die Ebene. Einige der Einschränkungsfunktionen sind wie folgt.
NonNeg
Beschränkt die Gewichtung auf nicht negativ.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Identity(gain = 1.0) model.add(
Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init)
)
wo, kernel_constraint stellen die Einschränkung dar, die in der Ebene verwendet werden soll.
UnitNorm
Beschränkt die Gewichte auf Einheitsnorm.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import constraints
my_constrain = constraints.UnitNorm(axis = 0)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_constraint = my_constrain))
MaxNorm
Beschränkt das Gewicht auf die Norm, die kleiner oder gleich dem angegebenen Wert ist.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import constraints
my_constrain = constraints.MaxNorm(max_value = 2, axis = 0)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_constraint = my_constrain))
wo,
max_value repräsentieren die Obergrenze
Achse stellen die Dimension dar, in der die Einschränkung angewendet werden soll. zB in Form (2,3,4) bezeichnet die Achse 0 die erste Dimension, 1 die zweite Dimension und 2 die dritte Dimension
MinMaxNorm
Beschränkt die Norm auf die angegebenen Werte zwischen den angegebenen Minimal- und Maximalwerten.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import constraints
my_constrain = constraints.MinMaxNorm(min_value = 0.0, max_value = 1.0, rate = 1.0, axis = 0)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_constraint = my_constrain))
wo, rate stellen die Rate dar, mit der die Gewichtsbeschränkung angewendet wird.
Regularisierer
Beim maschinellen Lernen werden in der Optimierungsphase Regularisierer eingesetzt. Während der Optimierung werden einige Einschränkungen für den Ebenenparameter angewendet. Das Keras-Regularisierungsmodul bietet die folgenden Funktionen zum Festlegen von Strafen auf der Ebene. Die Regularisierung gilt nur pro Schicht.
L1 Regularizer
Es bietet eine L1-basierte Regularisierung.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import regularizers
my_regularizer = regularizers.l1(0.)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_regularizer = my_regularizer))
wo, kernel_regularizer stellen die Rate dar, mit der die Gewichtsbeschränkung angewendet wird.
L2 Regularizer
Es bietet eine L2-basierte Regularisierung.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import regularizers
my_regularizer = regularizers.l2(0.)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_regularizer = my_regularizer))
L1 und L2 Regularizer
Es bietet sowohl L1- als auch L2-basierte Regularisierung.
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import regularizers
my_regularizer = regularizers.l2(0.)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_regularizer = my_regularizer))
Aktivierungen
Beim maschinellen Lernen ist die Aktivierungsfunktion eine spezielle Funktion, mit der ermittelt wird, ob ein bestimmtes Neuron aktiviert ist oder nicht. Grundsätzlich führt die Aktivierungsfunktion eine nichtlineare Transformation der Eingabedaten durch und ermöglicht so den Neuronen, besser zu lernen. Die Ausgabe eines Neurons hängt von der Aktivierungsfunktion ab.
Wie Sie sich an das Konzept der Einzelwahrnehmung erinnern, ist die Ausgabe eines Perzeptrons (Neurons) einfach das Ergebnis der Aktivierungsfunktion, die die Summe aller Eingaben multipliziert mit dem entsprechenden Gewicht plus der Gesamtverzerrung, falls verfügbar, akzeptiert.
result = Activation(SUMOF(input * weight) + bias)
Die Aktivierungsfunktion spielt daher eine wichtige Rolle für das erfolgreiche Lernen des Modells. Keras bietet viele Aktivierungsfunktionen im Aktivierungsmodul. Lassen Sie uns alle im Modul verfügbaren Aktivierungen lernen.
linear
Wendet die lineare Funktion an. Tut nichts.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'linear', input_shape = (784,)))
Wo, activationbezieht sich auf die Aktivierungsfunktion der Schicht. Es kann einfach durch den Namen der Funktion angegeben werden und die Ebene verwendet entsprechende Aktivatoren.
elu
Wendet eine exponentielle Lineareinheit an.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'elu', input_shape = (784,)))
Selu
Wendet eine skalierte exponentielle Lineareinheit an.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'selu', input_shape = (784,)))
relu
Gilt für die gleichgerichtete Lineareinheit.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,)))
Softmax
Wendet die Softmax-Funktion an.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'softmax', input_shape = (784,)))
softplus
Wendet die Softplus-Funktion an.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'softplus', input_shape = (784,)))
Softsign
Wendet die Softsign-Funktion an.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'softsign', input_shape = (784,)))
tanh
Wendet die hyperbolische Tangentenfunktion an.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'tanh', input_shape = (784,)))
Sigmoid
Wendet die Sigmoid-Funktion an.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'sigmoid', input_shape = (784,)))
hard_sigmoid
Wendet die Hard Sigmoid-Funktion an.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'hard_sigmoid', input_shape = (784,)))
exponentiell
Wendet die Exponentialfunktion an.
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
Sr.Nr. | Ebenen & Beschreibung |
---|---|
1 |
Dichte Schicht Dense layer ist die reguläre tief verbundene neuronale Netzwerkschicht. |
2 |
Dropout-Ebenen Dropout ist eines der wichtigsten Konzepte beim maschinellen Lernen. |
3 |
Ebenen reduzieren Flatten wird verwendet, um die Eingabe zu reduzieren. |
4 |
Ebenen neu formen Reshape wird verwendet, um die Form der Eingabe zu ändern. |
5 |
Ebenen zulassen Permute wird auch verwendet, um die Form der Eingabe mithilfe eines Musters zu ändern. |
6 |
RepeatVector-Ebenen RepeatVector wird verwendet, um die Eingabe für die eingestellte Anzahl n-mal zu wiederholen. |
7 |
Lambda-Schichten Lambda wird verwendet, um die Eingabedaten mithilfe eines Ausdrucks oder einer Funktion zu transformieren. |
8 |
Faltungsschichten Keras enthält viele Ebenen zum Erstellen von Convolution-basierten ANN, im Volksmund als Convolution Neural Network (CNN) bezeichnet . |
9 |
Pooling-Schicht Es wird verwendet, um maximale Pooling-Operationen für zeitliche Daten durchzuführen. |
10 |
Lokal verbundene Schicht Lokal verbundene Layer ähneln dem Conv1D-Layer, der Unterschied besteht jedoch darin, dass die Gewichte der Conv1D-Layer gemeinsam genutzt werden, die Gewichte hier jedoch nicht gemeinsam genutzt werden. |
11 |
Ebene zusammenführen Es wird verwendet, um eine Liste von Eingaben zusammenzuführen. |
12 |
Ebene einbetten Es führt Einbettungsvorgänge in der Eingabeebene aus. |