Az aktiválások használata
Az aktiválások vagy egy Activation
rétegen keresztül használhatók, vagy az összes előremenő réteg által támogatott activation
argumentumon keresztül:
model.add(layers.Dense(64, activation=activations.relu))
Ez a következővel egyenértékű:
Minden beépített aktiválás átadható a string azonosítójukon keresztül is:
model.add(layers.Dense(64, activation='relu'))
A rendelkezésre álló aktiválások
relu függvény
tf.keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0)
Az egyenesített lineáris egység aktiválási függvényt alkalmazza.
Egyértelmezett értékekkel a standard ReLU aktivációt adja vissza:max(x, 0)
, a 0 és a bemeneti tenzor elemenkénti maximumát.
Az alapértelmezett paraméterek módosítása lehetővé teszi nem nulla küszöbértékek használatát,az aktiválás maximális értékének megváltoztatását,és a bemenet nem nulla többszörösének használatát a küszöbérték alatti értékek esetén.
Például:
Argumentumok
- x:
tensor
vagyvariable
. - alpha:
- max_value: Egy
float
, amely a küszöbértéknél alacsonyabb értékek meredekségét szabályozza. - max_value:
- threshold: Egy
float
, amely meghatározza a telítési küszöbértéket (a legnagyobb érték, amelyet a függvény visszaad). - threshold: Egy
float
, amely megadja az aktiválási függvény küszöbértékét, amely alatt az értékeket csillapítja vagy nullára állítja.
Returns
A Tensor
, amely a bemeneti tenzort reprezentálja,a relu aktiválási függvény által átalakítva.A tenzor a bemenettel x
azonos alakú és d-típusú lesz.
sigmoid függvény
tf.keras.activations.sigmoid(x)
Sigmoid aktiválási függvény, sigmoid(x) = 1 / (1 + exp(-x))
.
A sigmoid aktiválási függvényt alkalmazza. Kis értékeknél (<-5),sigmoid
nullához közeli értéket ad vissza, és nagy értékeknél (>5)a függvény eredménye közelít az 1-hez.
Sigmoid egyenértékű egy 2 elemű Softmax-szal, ahol a második elemet nullának tételezzük fel. A sigmoid függvény mindig0 és 1 közötti értéket ad vissza.
Példa:
Argumentumok
- x:
Visszatér
- Tenzor a szigmoid aktiválással:
1 / (1 + exp(-x))
.
softmax függvény
tf.keras.activations.softmax(x, axis=-1)
A kimeneti vektor elemei a (0, 1) tartományban vannak, és összegük 1.
Minden vektort függetlenül kezel. A axis
argumentum határozza meg, hogy a bemenet melyik tengelye mentén alkalmazzuk a függvényt.
A softmax-ot gyakran használják egy osztályozóhálózat utolsó rétegének aktiválásaként, mivel az eredményt valószínűségi eloszlásként lehet értelmezni.
A softmax minden egyes x vektor számításaexp(x) / tf.reduce_sum(exp(x))
.
A bemeneti értékek in a kapott valószínűség log-odds-ai.
Argumentumok
- x : Bemeneti tenzor.
- axis: Egész szám, tengely, amely mentén a softmax normalizációt alkalmazzuk.
Returns
Tensor, a softmax transzformáció kimenete (minden érték nem negatív és összege 1).
Raises
- ValueError: Abban az esetben, ha
dim(x) == 1
.
softplus függvény
tf.keras.activations.softplus(x)
Softplus aktivációs függvény, softplus(x) = log(exp(x) + 1)
.
Példa Használat:
Argumentumok
- x:
Returns
- A softplus aktiválás:
log(exp(x) + 1)
.
softsign függvény
tf.keras.activations.softsign(x)
Softsign aktiváló függvény, softsign(x) = x / (abs(x) + 1)
.
Példa Használat:
>>> a = tf.constant(, dtype = tf.float32)>>> b = tf.keras.activations.softsign(a)>>> b.numpy()array(, dtype=float32)
Argumentumok
- x:
Returns
- A softsign aktiválása:
x / (abs(x) + 1)
.
tanh függvény
tf.keras.activations.tanh(x)
Például:
Argumentumok
- x:
Visszatér
- A bemenettel
x
azonos alakú és d-típusú tenzor, tanh aktiválással:tanh(x) = sinh(x)/cosh(x) = ((exp(x) - exp(-x))/(exp(x) + exp(-x)))
.
selu függvény
tf.keras.activations.selu(x)
Skalált exponenciális lineáris egység (SELU).
A skálázott exponenciális lineáris egység (SELU) aktiválási függvényt a következőképpen definiáljuk:
if x > 0: return scale * x
if x < 0: return scale * alpha * (exp(x) - 1)
ahol alpha
és scale
előre meghatározott konstansok(alpha=1.67326324
és scale=1.05070098
).
Gyakorlatilag a SELU aktiválási függvény megszorozza scale
(> 1) a tf.keras.activations.elu
függvény kimenetével, hogy pozitív bemenetek esetén egynél nagyobb meredekséget biztosítson.
A alpha
és scale
értékeit úgy választjuk meg, hogy a bemenetek átlaga és varianciája megmaradjon két egymást követő réteg között, amennyiben a súlyok inicializálása helyes (lásd tf.keras.initializers.LecunNormal
inicializáló) és a bemeneti egységek száma “elég nagy” (további információért lásd a referenciadokumentumot).
Példa Használat:
Argumentumok
- x:
Returns
- A skálázott exponenciális egységaktiválás:
scale * elu(x, alpha)
.
Notes: – A tf.keras.initializers.LecunNormal
inicializálóval együtt kell használni. – A tf.keras.layers.AlphaDropout
kiesési változattal együtt használandó (nem rendszeres kiesés).
Hivatkozások: – Klambauer et al., 2017
elu function
tf.keras.activations.elu(x, alpha=1.0)
Exponenciális lineáris egység.
Az exponenciális lineáris egység (ELU) a alpha > 0
segítségével:x
ha x > 0
ésalpha * (exp(x) - 1)
ha x < 0
Az ELU hiperparaméter alpha
szabályozza azt az értéket, amelyre egyELU negatív nettó bemenetek esetén telítődik. Az ELU-k csökkentik a csökkenő gradiens hatását.
Az ELU-k negatív értékkel rendelkeznek, ami az aktivációk átlagát a nullához közelíti.A nullához közelebbi átlagos aktivációk gyorsabb tanulást tesznek lehetővé, mivel közelebb hozzák a gradienst a természetes gradienshez.Az ELU-k negatív értékre telítődnek, amikor az argumentum kisebb lesz.A telítődés kis deriváltat jelent, ami csökkenti a variációtés a következő rétegbe terjedő információt.
Példa Használat:
Argumentumok
- x:
- alpha: Egy skalár, meredeksége negatív szakasz.
alpha
Azt az értéket szabályozza, ameddig az ELU telítődik negatív hálózati bemenetek esetén.
Returns
- Az exponenciális lineáris egység (ELU) aktiválási függvénye:
x
hax > 0
ésalpha * (exp(x) - 1)
hax < 0
.
Hivatkozás: (Clevert et al, 2016)
exponenciális függvény
tf.keras.activations.exponential(x)
exponenciális aktiválási függvény.
Például:
Argumentumok
- x:
Visszatér
- Tenzor exponenciális aktiválással:
exp(x)
.
Egyéni aktiválások létrehozása
Egy TensorFlow hívhatót is használhatsz aktiválásként(ebben az esetben egy tenzort kell fogadnia és egy azonos alakú és dtípusú tenzort kell visszaadnia):
model.add(layers.Dense(64, activation=tf.nn.tanh))
A “fejlett aktiválási” rétegekről
Az egyszerű TensorFlow függvénynél összetettebb aktiválások (pl. tanulható aktiválások, amelyek fenntartanak egy állapotot)Advanced Activation rétegekként érhetőek el,és a tf.keras.layers.advanced_activations
modulban találhatók. Ezek közé tartozik a PReLU
és a LeakyReLU
.Ha olyan egyéni aktiválásra van szüksége, amely állapotot igényel, akkor azt egyéni rétegként kell megvalósítania.
Megjegyzendő, hogy az aktiválási rétegek példányait nem szabad átadni egy réteg activation
argumentumaként.Ezeket ugyanúgy kell használni, mint a hagyományos rétegeket, például:
x = layers.Dense(10)(x)x = layers.LeakyReLU()(x)
.