Utilizzo delle attivazioni
Le attivazioni possono essere utilizzate sia attraverso uno strato Activation
, sia attraverso l’argomento activation
supportato da tutti gli strati forward:
model.add(layers.Dense(64, activation=activations.relu))
Questo è equivalente a:
Tutte le attivazioni incorporate possono anche essere passate attraverso il loro identificatore di stringa:
model.add(layers.Dense(64, activation='relu'))
Attivazioni disponibili
funzione relu
tf.keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0)
Applica la funzione di attivazione lineare rettificata per unità.
Con valori predefiniti, questo restituisce l’attivazione ReLU standard:max(x, 0)
, il massimo degli elementi di 0 e il tensore di ingresso.
Modificare i parametri di default permette di usare soglie non nulle, cambiare il valore massimo dell’attivazione, e usare un multiplo non nullo dell’input per valori sotto la soglia.
Per esempio:
Argomenti
- x: Ingresso
tensor
ovariable
. - alfa: Un
float
che regola la pendenza per valori inferiori alla soglia. - max_value: Un
float
che imposta la soglia di saturazione (il valore più grande che la funzione restituirà). - threshold: Un
float
che dà il valore di soglia della funzione di attivazione al di sotto del quale i valori saranno smorzati o azzerati.
Returns
A Tensor
che rappresenta il tensore di ingresso, trasformato dalla funzione di attivazione relu.Il tensore avrà la stessa forma e tipo d’ingresso x
.
funzione sigmoide
tf.keras.activations.sigmoid(x)
Funzione di attivazione sigmoide, sigmoid(x) = 1 / (1 + exp(-x))
.
Applica la funzione di attivazione sigmoide. Per valori piccoli (<-5),sigmoid
restituisce un valore vicino a zero, e per valori grandi (>5) il risultato della funzione si avvicina a 1.
Sigmoide è equivalente a un Softmax a 2 elementi, dove il secondo elemento è assunto come zero. La funzione sigmoide restituisce sempre un valore tra0 e 1.
Per esempio:
Argomenti
- x: Tensore di ingresso.
Ritorna
- Tensore con attivazione sigmoidea:
1 / (1 + exp(-x))
.
funzione softmax
tf.keras.activations.softmax(x, axis=-1)
Softmax converte un vettore reale in un vettore di probabilità categoriche.
Gli elementi del vettore di uscita sono nell’intervallo (0, 1) e sommano a 1.
Ogni vettore è gestito indipendentemente. L’argomento axis
imposta lungo quale asse dell’input la funzione viene applicata.
Softmax è spesso usato come attivazione per l’ultimo strato di una rete di classificazione perché il risultato potrebbe essere interpretato come una distribuzione di probabilità.
Il softmax di ogni vettore x è calcolato comeexp(x) / tf.reduce_sum(exp(x))
.
I valori di input in sono le probabilità log-odds della probabilità risultante.
Argomenti
- x : tensore di input.
- asse: Integer, asse lungo il quale viene applicata la normalizzazione softmax.
Returns
Tensore, output della trasformazione softmax (tutti i valori sono non negativi e sommano a 1).
Risorse
- ValueError: Nel caso
dim(x) == 1
.
funzione softplus
tf.keras.activations.softplus(x)
Funzione di attivazione softplus, softplus(x) = log(exp(x) + 1)
.
Esempio Uso:
Argomenti
- x: Tensore di ingresso.
Ritorna
- L’attivazione softplus:
log(exp(x) + 1)
.
funzione softsign
tf.keras.activations.softsign(x)
Funzione di attivazione softplus, softsign(x) = x / (abs(x) + 1)
.
Esempio Uso:
>>> a = tf.constant(, dtype = tf.float32)>>> b = tf.keras.activations.softsign(a)>>> b.numpy()array(, dtype=float32)
Argomenti
- x: Ingresso tensore.
Ritorna
- L’attivazione del softsign:
x / (abs(x) + 1)
.
funzione tanh
tf.keras.activations.tanh(x)
Funzione di attivazione tangente iperbolica.
Per esempio:
Argomenti
- x: Input tensore.
Ritorna
- Tensore della stessa forma e tipo d dell’input
x
, con attivazione tanh:tanh(x) = sinh(x)/cosh(x) = ((exp(x) - exp(-x))/(exp(x) + exp(-x)))
.
funzione selu
tf.keras.activations.selu(x)
Scaled Exponential Linear Unit (SELU).
La funzione di attivazione Scaled Exponential Linear Unit (SELU) è definita come:
if x > 0: return scale * x
if x < 0: return scale * alpha * (exp(x) - 1)
dove alpha
e scale
sono costanti predefinite (alpha=1.67326324
e scale=1.05070098
).
Fondamentalmente, la funzione di attivazione SELU moltiplica scale
(> 1) con l’uscita della funzione tf.keras.activations.elu
per assicurare una pendenza maggiore di uno per gli ingressi positivi.
I valori di alpha
e scale
sono scelti in modo che la media e la varianza degli ingressi siano conservati tra due strati consecutivi, purché i pesi siano inizializzati correttamente (vedi tf.keras.initializers.LecunNormal
inizializzatore) e il numero di unità di ingresso sia “abbastanza grande” (vedi documento di riferimento per maggiori informazioni).
Esempio di utilizzo:
Argomenti
- x: Un tensore o una variabile per cui calcolare la funzione di attivazione.
Ritorna
- L’attivazione esponenziale scalata dell’unità:
scale * elu(x, alpha)
.
Notes: – Da usare insieme all’inizializzatore tf.keras.initializers.LecunNormal
. – Da usare insieme alla variante di dropout tf.keras.layers.AlphaDropout
(non dropout regolare).
Riferimenti: – Klambauer et al., 2017
funzione elu
tf.keras.activations.elu(x, alpha=1.0)
Exponential Linear Unit.
L’unità lineare esponenziale (ELU) con alpha > 0
è:x
se x > 0
ealpha * (exp(x) - 1)
se x < 0
L’iperparametro ELU alpha
controlla il valore a cui unELU satura per ingressi netti negativi. Le ELU diminuiscono l’effetto del gradiente crescente.
Le ELU hanno valori negativi che spingono la media delle attivazioni più vicine allo zero.Le attivazioni medie che sono più vicine allo zero permettono un apprendimento più veloce perché portano il gradiente più vicino al gradiente naturale.Le ELU saturano ad un valore negativo quando l’argomento diventa più piccolo.Saturazione significa una piccola derivata che diminuisce la variazione e l’informazione che viene propagata allo strato successivo.
Esempio di utilizzo:
Argomenti
- x: Tensore di ingresso.
- alfa: Uno scalare, pendenza della sezione negativa.
alpha
controlla il valore a cui una ELU satura per gli ingressi negativi della rete.
Ritorna
- La funzione di attivazione dell’unità lineare esponenziale (ELU):
x
sex > 0
ealpha * (exp(x) - 1)
sex < 0
.
Riferimento: Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs) (Clevert et al, 2016)
funzione esponenziale
tf.keras.activations.exponential(x)
Funzione di attivazione esponenziale.
Per esempio:
Argumenti
- x: Tensore di ingresso.
Ritorna
- Tensore con attivazione esponenziale:
exp(x)
.
Creazione di attivazioni personalizzate
È anche possibile utilizzare un callable di TensorFlow come attivazione (in questo caso dovrebbe prendere un tensore e restituire un tensore della stessa forma e tipo d):
model.add(layers.Dense(64, activation=tf.nn.tanh))
Sugli strati di “attivazione avanzata”
Attivazioni che sono più complesse di una semplice funzione TensorFlow (es. attivazioni apprendibili, che mantengono uno stato) sono disponibili come livelli di attivazione avanzata, e possono essere trovati nel modulo tf.keras.layers.advanced_activations
. Questi includono PReLU
e LeakyReLU
.Se avete bisogno di un’attivazione personalizzata che richiede uno stato, dovreste implementarla come un livello personalizzato.
Nota che non dovresti passare istanze di livelli di attivazione come argomento activation
di un livello.Sono pensati per essere usati proprio come livelli regolari, ad esempio:
x = layers.Dense(10)(x)x = layers.LeakyReLU()(x)