Verwendung von Aktivierungen
Aktivierungen können entweder über eine Activation
-Schicht oder über das activation
-Argument verwendet werden, das von allen Vorwärtsschichten unterstützt wird:
model.add(layers.Dense(64, activation=activations.relu))
Das entspricht:
Alle eingebauten Aktivierungen können auch über ihren String-Bezeichner übergeben werden:
model.add(layers.Dense(64, activation='relu'))
Verfügbare Aktivierungen
relu-Funktion
tf.keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0)
Wendet die gleichgerichtete lineare Einheitsaktivierungsfunktion an.
Mit Standardwerten gibt dies die Standard-ReLU-Aktivierung zurück:max(x, 0)
, das elementweise Maximum von 0 und den Eingabetensor.
Durch Ändern der Standardparameter können Sie Schwellenwerte ungleich Null verwenden, den Maximalwert der Aktivierung ändern und ein Vielfaches der Eingabe ungleich Null für Werte unterhalb des Schwellenwerts verwenden.
Beispiel:
Argumente
- x: Eingabe
tensor
odervariable
. - alpha: Ein
float
, das die Steigung für Werte unterhalb des Schwellenwerts festlegt. - max_value: Ein
float
, der den Sättigungsschwellenwert festlegt (den größten Wert, den die Funktion zurückgibt). - threshold: Ein
float
, der den Schwellenwert der Aktivierungsfunktion angibt, unterhalb dessen Werte gedämpft oder auf Null gesetzt werden.
Returns
Ein Tensor
, der den Eingabetensor darstellt, der durch die Relu-Aktivierungsfunktion transformiert wird.Der Tensor hat die gleiche Form und den gleichen Typ wie die Eingabe x
.
Sigmoidfunktion
tf.keras.activations.sigmoid(x)
Sigmoidaktivierungsfunktion, sigmoid(x) = 1 / (1 + exp(-x))
.
Wendet die Sigmoidaktivierungsfunktion an. Für kleine Werte (<-5) gibt sigmoid
einen Wert nahe Null zurück, und für große Werte (>5) liegt das Ergebnis der Funktion nahe bei 1.
Sigmoid entspricht einer 2-Element-Softmax, wobei das zweite Element als Null angenommen wird. Die Sigmoid-Funktion liefert immer einen Wert zwischen0 und 1.
Beispiel:
Argumente
- x: Eingabe Tensor.
Returns
- Tensor mit der sigmoiden Aktivierung:
1 / (1 + exp(-x))
.
Softmax-Funktion
tf.keras.activations.softmax(x, axis=-1)
Softmax wandelt einen reellen Vektor in einen Vektor kategorischer Wahrscheinlichkeiten um.
Die Elemente des Ausgabevektors liegen im Bereich (0, 1) und summieren sich zu 1.
Jeder Vektor wird unabhängig behandelt. Das Argument axis
legt fest, entlang welcher Achse der Eingabe die Funktion angewendet wird.
Softmax wird oft als Aktivierung für die letzte Schicht eines Klassifikationsnetzes verwendet, da das Ergebnis als Wahrscheinlichkeitsverteilung interpretiert werden kann.
Die Softmax eines jeden Vektors x wird berechnet alsexp(x) / tf.reduce_sum(exp(x))
.
Die Eingabewerte in sind die logarithmischen Quoten der resultierenden Wahrscheinlichkeit.
Argumente
- x : Eingabetensor.
- axis: Integer, Achse, entlang der die Softmax-Normalisierung angewendet wird.
Returns
Tensor, Ausgabe der Softmax-Transformation (alle Werte sind nicht-negativ und summieren sich zu 1).
Raises
- ValueError: Im Fall
dim(x) == 1
.
Softplus-Funktion
tf.keras.activations.softplus(x)
Softplus-Aktivierungsfunktion, softplus(x) = log(exp(x) + 1)
.
Beispiel Verwendung:
Argumente
- x: Eingabetensor.
Returns
- Die Softplus-Aktivierung:
log(exp(x) + 1)
.
Softsign-Funktion
tf.keras.activations.softsign(x)
Softsign-Aktivierungsfunktion, softsign(x) = x / (abs(x) + 1)
.
Beispiel Verwendung:
>>> a = tf.constant(, dtype = tf.float32)>>> b = tf.keras.activations.softsign(a)>>> b.numpy()array(, dtype=float32)
Argumente
- x: Input-Tensor.
Returns
- Die Softsign-Aktivierung:
x / (abs(x) + 1)
.
tanh-Funktion
tf.keras.activations.tanh(x)
Hyperbolische Tangens-Aktivierungsfunktion.
Beispiel:
Argumente
- x: Eingabe-Tensor.
Returns
- Tensor der gleichen Form und dtype der Eingabe
x
, mit tanh-Aktivierung:tanh(x) = sinh(x)/cosh(x) = ((exp(x) - exp(-x))/(exp(x) + exp(-x)))
.
selu-Funktion
tf.keras.activations.selu(x)
Scaled Exponential Linear Unit (SELU).
Die SELU-Aktivierungsfunktion (Scaled Exponential Linear Unit) ist definiert als:
if x > 0: return scale * x
if x < 0: return scale * alpha * (exp(x) - 1)
wobei alpha
und scale
vordefinierte Konstanten sind (alpha=1.67326324
und scale=1.05070098
).
Grundsätzlich multipliziert die SELU-Aktivierungsfunktion scale
(> 1) mit dem Ausgang der tf.keras.activations.elu
-Funktion, um eine Steigung größer als 1 für positive Eingaben zu gewährleisten.
Die Werte von alpha
und scale
werden so gewählt, dass der Mittelwert und die Varianz der Eingaben zwischen zwei aufeinanderfolgenden Schichten erhalten bleiben, solange die Gewichte korrekt initialisiert werden (siehe tf.keras.initializers.LecunNormal
Initialisierer) und die Anzahl der Eingabeeinheiten „groß genug“ ist (siehe Referenzpapier für weitere Informationen).
Beispiel Verwendung:
Argumente
- x: Ein Tensor oder eine Variable, für die die Aktivierungsfunktion berechnet werden soll.
Returns
- Die skalierte exponentielle Einheitsaktivierung:
scale * elu(x, alpha)
.
Notes: – Wird zusammen mit dem Initialisierer tf.keras.initializers.LecunNormal
verwendet. – Zu verwenden zusammen mit der Dropout-Variante tf.keras.layers.AlphaDropout
(nicht regulärer Dropout).
Referenzen: – Klambauer et al., 2017
elu function
tf.keras.activations.elu(x, alpha=1.0)
Exponential Linear Unit.
Die exponentielle lineare Einheit (ELU) mit alpha > 0
ist:x
wenn x > 0
undalpha * (exp(x) - 1)
wenn x < 0
Der ELU-Hyperparameter alpha
steuert den Wert, bis zu dem eineELU für negative Nettoeingaben sättigt. ELUs vermindern den Effekt des ansteigenden Gradienten.
ELUs haben negative Werte, die den Mittelwert der Aktivierungen näher an Null bringen.Mittlere Aktivierungen, die näher an Null sind, ermöglichen schnelleres Lernen, da sie den Gradienten näher an den natürlichen Gradienten bringen.ELUs sättigen auf einen negativen Wert, wenn das Argument kleiner wird.Sättigung bedeutet eine kleine Ableitung, die die Variation und die Information, die an die nächste Schicht weitergegeben wird, verringert.
Beispiel Verwendung:
Argumente
- x: Eingangstensor.
- alpha: Ein Skalar, Steigung des negativen Abschnitts.
alpha
steuert den Wert, bis zu dem eine ELU bei negativen Netzeingaben in die Sättigung geht.
Returns
- Die Aktivierungsfunktion der exponentiellen linearen Einheit (ELU):
x
wennx > 0
undalpha * (exp(x) - 1)
wennx < 0
.
Referenz: Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs) (Clevert et al, 2016)
Exponentialfunktion
tf.keras.activations.exponential(x)
Exponentielle Aktivierungsfunktion.
Beispiel:
Argumente
- x: Eingabe Tensor.
Returns
- Tensor mit exponentieller Aktivierung:
exp(x)
.
Erstellen von benutzerdefinierten Aktivierungen
Sie können auch eine TensorFlow Callable als Aktivierung verwenden (in diesem Fall sollte sie einen Tensor nehmen und einen Tensor derselben Form und dtype zurückgeben):
model.add(layers.Dense(64, activation=tf.nn.tanh))
Über „fortgeschrittene Aktivierungs“-Schichten
Aktivierungen, die komplexer sind als eine einfache TensorFlow-Funktion (z.B.. lernfähige Aktivierungen, die einen Zustand beibehalten), sind als erweiterte Aktivierungsschichten verfügbar und können im Modul tf.keras.layers.advanced_activations
gefunden werden. Dazu gehören PReLU
und LeakyReLU
.Wenn Sie eine benutzerdefinierte Aktivierung benötigen, die einen Zustand erfordert, sollten Sie sie als benutzerdefinierte Schicht implementieren.
Beachten Sie, dass Sie keine Aktivierungsschichten als activation
Argument einer Schicht übergeben sollten.Sie sind dafür gedacht, wie normale Schichten verwendet zu werden, z.B.:
x = layers.Dense(10)(x)x = layers.LeakyReLU()(x)