Použití aktivace
Aktivaci lze použít buď prostřednictvím vrstvy Activation
, nebo prostřednictvím argumentu activation
, který podporují všechny dopředné vrstvy:
model.add(layers.Dense(64, activation=activations.relu))
Toto odpovídá:
Všechny vestavěné aktivace lze také předat prostřednictvím jejich řetězcového identifikátoru:
model.add(layers.Dense(64, activation='relu'))
Dostupné aktivace
funkce relu
tf.keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0)
Použije rektifikovanou lineární aktivační funkci jednotky.
S výchozími hodnotami vrací standardní aktivaci ReLU:max(x, 0)
, elementární maximum 0 a vstupní tenzor.
Úprava výchozích parametrů umožňuje použít nenulové prahové hodnoty,změnit maximální hodnotu aktivace a použít nenulový násobek vstupu pro hodnoty pod prahem.
Například:
Argumenty
- x: Vstup
tensor
nebovariable
. - alfa:
float
, který řídí sklon pro hodnoty nižší než prahová hodnota. - max_value:
float
, který nastavuje práh nasycení (největší hodnotu, kterou funkce vrátí). - threshold: A
float
udávající prahovou hodnotu aktivační funkce, pod kterou budou hodnoty tlumeny nebo nastaveny na nulu.
Vrací
A Tensor
představující vstupní tenzor,transformovaný aktivační funkcí relu.Tenzor bude mít stejný tvar a typ d vstupu x
.
sigmoidní funkce
tf.keras.activations.sigmoid(x)
Sigmoidní aktivační funkce, sigmoid(x) = 1 / (1 + exp(-x))
.
Použije sigmoidní aktivační funkci. Pro malé hodnoty (<-5),sigmoid
vrací hodnotu blízkou nule a pro velké hodnoty (>5)se výsledek funkce blíží 1.
Sigmoid je ekvivalentní dvouprvkovému Softmaxu, kde se předpokládá, že druhý prvek je nulový. Funkce sigmoid vždy vrací hodnotu mezi0 a 1.
Například:
Argumenty
- x:
Vrací
- tenzor s aktivací sigmoidy:
1 / (1 + exp(-x))
.
funkce softmax
tf.keras.activations.softmax(x, axis=-1)
Softmax převádí reálný vektor na vektor kategoriálních pravděpodobností.
Prvky výstupního vektoru jsou v rozsahu (0, 1) a jejich součet je 1.
Každý vektor se zpracovává nezávisle. Argument axis
nastavuje, podél které osy vstupu se funkce aplikuje.
Softmax se často používá jako aktivace pro poslední vrstvu klasifikační sítě, protože výsledek lze interpretovat jako rozdělení pravděpodobnosti.
Softmax každého vektoru x se vypočítá jakoexp(x) / tf.reduce_sum(exp(x))
.
Vstupní hodnoty v jsou logaritmy výsledné pravděpodobnosti.
Argumenty
- x : Vstupní tenzor.
- osa: Celé číslo, osa, podél které je aplikována normalizace softmax.
Vrací
Tenzor, výstup transformace softmax (všechny hodnoty jsou nezáporné a jejich součet je 1).
Raises
- ValueError: V případě
dim(x) == 1
.
softplus funkce
tf.keras.activations.softplus(x)
aktivační funkce softplus, softplus(x) = log(exp(x) + 1)
.
Příklad použití:
Argumenty
- x:
Vrací
- Aktivace softplus:
log(exp(x) + 1)
.
funkce softsign
tf.keras.activations.softsign(x)
Aktivační funkce softsign, softsign(x) = x / (abs(x) + 1)
.
Příklad použití:
>>> a = tf.constant(, dtype = tf.float32)>>> b = tf.keras.activations.softsign(a)>>> b.numpy()array(, dtype=float32)
Argumenty
- x:
Vrací
- Aktivace softsign:
x / (abs(x) + 1)
.
funkce tanh
tf.keras.activations.tanh(x)
Hyperbolická aktivační funkce tangens.
Například:
Argumenty
- x:
Vrací
- tenzor stejného tvaru a typu d vstupu
x
, s aktivací tanh:tanh(x) = sinh(x)/cosh(x) = ((exp(x) - exp(-x))/(exp(x) + exp(-x)))
.
funkce selu
tf.keras.activations.selu(x)
Scaled Exponential Linear Unit (SELU).
Aktivační funkce SELU (Scaled Exponential Linear Unit) je definována jako:
if x > 0: return scale * x
if x < 0: return scale * alpha * (exp(x) - 1)
kde alpha
a scale
jsou předem definované konstanty(alpha=1.67326324
a scale=1.05070098
).
V podstatě aktivační funkce SELU násobí scale
(> 1) svýstupem funkce tf.keras.activations.elu
, aby zajistila sklon většínež jedna pro kladné vstupy.
Hodnoty alpha
a scale
jsouvoleny tak, že střední hodnota a rozptyl vstupů jsou zachoványmezi dvěma po sobě jdoucími vrstvami, pokud jsou váhy inicializoványsprávně (viz inicializátor tf.keras.initializers.LecunNormal
)a počet vstupních jednotek je „dostatečně velký“(více informací viz referenční dokument).
Příklad použití:
Argumenty
- x:
Vrací
- Škálovanou exponenciální jednotkovou aktivaci:
scale * elu(x, alpha)
.
Notes: – Používá se společně s inicializátorem tf.keras.initializers.LecunNormal
. – Používá se společně s variantou vysazení tf.keras.layers.AlphaDropout
(ne s běžným vysazením).
Reference: – Klambauer et al., 2017
funkce elu
tf.keras.activations.elu(x, alpha=1.0)
Exponenciální lineární jednotka.
Exponenciální lineární jednotka (ELU) s alpha > 0
je:x
pokud x > 0
aalpha * (exp(x) - 1)
pokud x < 0
Hiperparametr ELU alpha
řídí hodnotu, na kterou se ELU nasytí pro záporné čisté vstupy. ELU snižují efekt klesajícího gradientu.
ELU mají záporné hodnoty, což posouvá střední hodnotu aktivacíblíže k nule.střední hodnoty aktivací, které jsou blíže nule, umožňují rychlejší učení, protože přibližují gradient přirozenému gradientu.ELU se nasytí na zápornou hodnotu, když se argument zmenší. nasycení znamená malou derivaci, která snižuje variacia informaci, která se šíří do další vrstvy.
Příklad použití:
Argumenty
- x:
- alfa: Vstupní tenzor: Skalár, sklon záporného řezu.
alpha
řídí hodnotu, na kterou se ELU nasytí pro záporné vstupy sítě.
Vrací
- Aktivační funkce exponenciální lineární jednotky (ELU):
x
pokudx > 0
aalpha * (exp(x) - 1)
pokudx < 0
.
Reference: Rychlé a přesné učení hlubokých sítí pomocí exponenciálních lineárních jednotek (ELU) (Clevert et al, 2016)
exponenciální funkce
tf.keras.activations.exponential(x)
Exponenciální aktivační funkce.
Například:
Argumenty
- x:
Vrací
- tenzor s exponenciální aktivací:
exp(x)
.
Vytváření vlastních aktivací
Jako aktivaci lze také použít volání TensorFlow(v tomto případě by mělo přijmout tenzor a vrátit tenzor stejného tvaru a dtypu):
model.add(layers.Dense(64, activation=tf.nn.tanh))
O „pokročilých aktivačních“ vrstvách
Aktivace, které jsou složitější než jednoduchá funkce TensorFlow (např. učitelné aktivace, které udržují stav)jsou k dispozici jako pokročilé aktivační vrstvy a najdete je v modulu tf.keras.layers.advanced_activations
. Patří mezi ně PReLU
a LeakyReLU
. pokud potřebujete vlastní aktivaci, která vyžaduje stav, měli byste ji implementovat jako vlastní vrstvu.
Všimněte si, že byste neměli předávat instance aktivačních vrstev jako argument activation
vrstvy. jsou určeny k použití stejně jako běžné vrstvy, například:
x = layers.Dense(10)(x)x = layers.LeakyReLU()(x)
.