Aktivaatioiden käyttö
Aktivaatioita voidaan käyttää joko Activation
-kerroksen kautta tai kaikkien etukäteiskerrosten tukeman activation
-argumentin kautta:
model.add(layers.Dense(64, activation=activations.relu))
model.add(layers.Dense(64, activation=activations.relu))
model.add(layers.Dense(64, activation=activations.relu))
Tämä vastaa:
Kaikki sisäänrakennetut aktivoinnit voidaan välittää myös niiden merkkijonotunnisteen kautta:
model.add(layers.Dense(64, activation='relu'))
Käytettävissä olevat aktivoinnit
relu-funktio
tf.keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0)
Soveltuu suoristettuun lineaariseen yksikköön perustuvaan aktivointifunktioon.
Ohjearvoilla tämä palauttaa tavallisen ReLU-aktivoinnin:max(x, 0)
, elementtiviisaan maksimin 0:sta ja syötetensorista.
Muuttamalla oletusparametreja voit käyttää nollasta poikkeavia kynnysarvoja,muuttaa aktivaation maksimiarvoa ja käyttää tulon nollasta poikkeavaa kerrannaisarvoa kynnysarvon alapuolella oleville arvoille.
Esimerkiksi:
Argumentit
- x: Tulo
tensor
taivariable
. - alpha:
float
, joka säätelee kaltevuutta kynnysarvoa pienemmille arvoille. - max_value:
float
, joka asettaa kyllästymiskynnyksen (suurin arvo, jonka funktio palauttaa). - threshold: A
float
, joka antaa aktivointifunktion kynnysarvon, jonka alapuolella olevat arvot vaimennetaan tai asetetaan nollaan.
Returns
A Tensor
A Tensor
, joka edustaa syöttötensoria,joka on muunnettu relu aktivointifunktion avulla.Tensorilla on sama muoto ja d-tyyppi kuin syötteellä x
.
sigmoidifunktio
tf.keras.activations.sigmoid(x)
Sigmoidiaktivointifunktio, sigmoid(x) = 1 / (1 + exp(-x))
.
Sovelletaan sigmoidiaktivointifunktiota. Pienillä arvoilla (<-5),sigmoid
palauttaa arvon lähellä nollaa, ja suurilla arvoilla (>5)funktion tulos tulee lähelle 1.
Sigmoid vastaa 2-elementtistä Softmaxia, jossa toisen elementin oletetaan olevan nolla. Sigmoidifunktio palauttaa aina arvon välillä0 ja 1.
Esimerkiksi:
Argumentit
- x:
Palauttaa
- Tensor, jolla on sigmoidinen aktivointi:
1 / (1 + exp(-x))
.
softmax-funktio
tf.keras.activations.softmax(x, axis=-1)
Softmax muuntaa reaalisen vektorin kategoristen todennäköisyyksien vektoriksi.
Tulostusvektorin alkiot ovat välillä (0, 1) ja niiden summa on 1.
Kaikkia vektoreita käsitellään erikseen. Argumentilla axis
asetetaan, minkä akselin mukaan funktiota sovelletaan.
Softmaxia käytetään usein luokitusverkon viimeisen kerroksen aktivointina, koska tulos voidaan tulkita todennäköisyysjakaumana.
Kunkin vektorin x softmax lasketaanexp(x) / tf.reduce_sum(exp(x))
.
Syöttöarvot in ovat tuloksena saadun todennäköisyyden log-odds.
Argumentit
- x : Syöttötensori.
- axis: Integer, akseli, jota pitkin softmax-normalisointia sovelletaan.
Returns
Tensor, softmax-muunnoksen ulostulo (kaikki arvot ovat ei-negatiivisia ja summa on 1).
Raises
- ValueError: Tapauksessa
dim(x) == 1
.
softplus-funktio
tf.keras.activations.softplus(x)
Softplus-aktivointifunktio, softplus(x) = log(exp(x) + 1)
.
Esimerkki Käyttö:
Argumentit
- x: Input tensor.
Returns
- Softplus-aktivointi:
log(exp(x) + 1)
.
softsign-funktio
tf.keras.activations.softsign(x)
Softsign-aktivointifunktio, softsign(x) = x / (abs(x) + 1)
.
Esimerkki Käyttö:
>>> a = tf.constant(, dtype = tf.float32)>>> b = tf.keras.activations.softsign(a)>>> b.numpy()array(, dtype=float32)
Argumentit
- x:
Returns
- Softsign-aktivointi:
x / (abs(x) + 1)
.
tanh-funktio
tf.keras.activations.tanh(x)
Hyperbolinen tangentti-aktivointifunktio.
Esimerkki:
Argumentit
- x: Input tensor.
Returns
- Tensor, joka on muodoltaan ja d-tyypiltään sama kuin input
x
, tanh-aktivoinnilla:tanh(x) = sinh(x)/cosh(x) = ((exp(x) - exp(-x))/(exp(x) + exp(-x)))
.
selu-funktio
tf.keras.activations.selu(x)
Scaled Exponential Linear Unit (SELU).
Skaalattu eksponentiaalinen lineaarinen yksikkö (SELU, Scaled Exponential Linear Unit) aktivointifunktio (SELU) määritellään seuraavasti:
if x > 0: return scale * x
if x < 0: return scale * alpha * (exp(x) - 1)
joissa alpha
ja scale
ovat ennalta määritettyjä vakioita(alpha=1.67326324
ja scale=1.05070098
).
Periaatteessa SELU-aktivointifunktio kertoo scale
(> 1) tf.keras.activations.elu
-funktion ulostulon kanssa varmistaakseen, että kaltevuus on suurempi kuin yksi positiivisille syötteille.
alpha
:n ja scale
:n arvot valitaan siten, että syötteiden keskiarvo ja varianssi säilyvät kahden peräkkäisen kerroksen välillä, kunhan painot on alustettu oikein (ks. tf.keras.initializers.LecunNormal
-aloitin) ja syöttöyksiköiden määrä on ”riittävän suuri” (ks. lisätietoja viitetiedostosta).
Esimerkki Käyttö:
Argumentit
- x: Tensori tai muuttuja, jolle aktivointifunktio lasketaan.
Palauttaa
- Skaalattu eksponentiaalinen yksikköaktivointi:
scale * elu(x, alpha)
.
Notes: – Käytetään yhdessä tf.keras.initializers.LecunNormal
-aloittajan kanssa. – Käytetään yhdessä pudotusmuunnoksen tf.keras.layers.AlphaDropout
kanssa (ei tavallinen pudotus).
Viitteet: – Klambauer et al., 2017
elu-funktio
tf.keras.activations.elu(x, alpha=1.0)
Eksponentiaalinen lineaarinen yksikkö.
Eksponentiaalinen lineaarinen yksikkö (ELU) alpha > 0
:x
jos x > 0
jaalpha * (exp(x) - 1)
jos x < 0
ELU-hyperparametrilla alpha
kontrolloidaan sitä, mihin arvoon ELU kyllästyy negatiivisten nettosyöttöjen osalta. ELU:t vähentävät häviävän gradientin vaikutusta.
ELU:illa on negatiiviset arvot, mikä työntää aktivaatioiden keskiarvon lähemmäs nollaa.Keskimääräiset aktivaatiot, jotka ovat lähempänä nollaa, mahdollistavat nopeamman oppimisen, koska ne tuovat gradientin lähemmäs luonnollista gradienttia.ELU:t kyllästyvät negatiiviseen arvoon, kun argumentti pienenee.Kyllästyminen tarkoittaa pientä derivaattaa, joka vähentää vaihtelua ja seuraavaan kerrokseen etenevää informaatiota.
Esimerkki Käyttö:
Argumentit
- x:
- alpha: Skalaari, kaltevuus negatiivinen leikkaus.
alpha
ohjaa arvoa, johon ELU kyllästyy negatiivisille verkkosyötteille.
Returns
- Eksponentiaalisen lineaarisen yksikön (ELU) aktivointifunktio:
x
josx > 0
jaalpha * (exp(x) - 1)
josx < 0
.
Viite: Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs) (Clevert et al, 2016)
eksponentiaalinen funktio
tf.keras.activations.exponential(x)
Eksponentiaalinen aktivointifunktio.
Esimerkki:
Argumentit
- x:
Palauttaa
- Tensor eksponentiaalisella aktivoinnilla:
exp(x)
.
Kustomoitujen aktivointien luominen
Voit käyttää aktivointina myös TensorFlow:n kutsuttavaa (callable) (tässä tapauksessa sen pitäisi ottaa tensori ja palauttaa samanmuotoinen ja dtyyppinen tensori):
model.add(layers.Dense(64, activation=tf.nn.tanh))
Tietoa ”edistyneistä aktivointikerroista”
Aktivaatiot, jotka ovat monimutkaisempia kuin yksinkertainen TensorFlow-funktio (esim. opittavissa olevat aktivoinnit, jotka ylläpitävät tilaa)ovat saatavilla kehittyneinä aktivointikerroksina,ja ne löytyvät moduulista tf.keras.layers.advanced_activations
. Näihin kuuluvat PReLU
ja LeakyReLU
.Jos tarvitset mukautetun aktivoinnin, joka vaatii tilan, sinun kannattaa toteuttaa se mukautettuna kerroksena.
Huomaa, että aktivointikerrosten instansseja ei saa välittää kerroksen activation
-argumenttina.Niitä on tarkoitus käyttää aivan kuten tavallisia kerroksia, esimerkiksi:
x = layers.Dense(10)(x)x = layers.LeakyReLU()(x)