Używanie aktywacji
Aktywacje mogą być używane albo poprzez warstwę Activation
, albo poprzez argument activation
obsługiwany przez wszystkie warstwy forward:
model.add(layers.Dense(64, activation=activations.relu))
Jest to równoważne z:
Wszystkie wbudowane aktywacje mogą być również przekazywane za pośrednictwem ich identyfikatora łańcuchowego:
model.add(layers.Dense(64, activation='relu'))
Dostępne aktywacje
funkcja relu
tf.keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0)
Stosuje rektyfikowaną liniową jednostkową funkcję aktywacji.
Z wartościami domyślnymi, zwraca standardową aktywację ReLU:max(x, 0)
, maksimum element-wise z 0 i tensora wejściowego.
Modyfikacja parametrów domyślnych pozwala na użycie niezerowych progów, zmianę maksymalnej wartości aktywacji oraz użycie niezerowej wielokrotności wejścia dla wartości poniżej progu.
Na przykład:
Argumenty
- x: Wejście
tensor
lubvariable
. - alfa: A
float
that governs the slope for values lower than the threshold. - max_value: A
float
, która określa próg nasycenia (największą wartość, jaką zwróci funkcja). - threshold: A
float
podający wartość progową funkcji aktywacji, poniżej której wartości będą tłumione lub ustawiane na zero.
Wraca
A Tensor
reprezentujący tensor wejściowy,przekształcony przez funkcję aktywacji relu.Tensor będzie miał ten sam kształt i dtype wejścia x
.
Funkcja sigmoidalna
tf.keras.activations.sigmoid(x)
Sigmoidalna funkcja aktywacji, sigmoid(x) = 1 / (1 + exp(-x))
.
Stosuje sigmoidalną funkcję aktywacji. Dla małych wartości (<-5),sigmoid
zwraca wartość bliską zeru, a dla dużych wartości (>5)wynik funkcji zbliża się do 1.
Sigmoida jest równoważna 2-elementowej Softmax, gdzie drugi element przyjmuje się za zero. Funkcja sigmoid zawsze zwraca wartość pomiędzy0 a 1.
Na przykład:
Argumenty
- x: Input tensor.
Returns
- Tensor z aktywacją sigmoidalną:
1 / (1 + exp(-x))
.
funkcja softmax
tf.keras.activations.softmax(x, axis=-1)
Softmax konwertuje wektor rzeczywisty na wektor prawdopodobieństw kategorycznych.
Elementy wektora wyjściowego są z zakresu (0, 1) i sumują się do 1.
Każdy wektor jest obsługiwany niezależnie. Argument axis
określa, wzdłuż której osi wejścia funkcja jest stosowana.
Softmax jest często używany jako aktywacja ostatniej warstwy sieci klasyfikacyjnej, ponieważ wynik może być interpretowany jako rozkład prawdopodobieństwa.
Softmax każdego wektora x jest obliczana jakoexp(x) / tf.reduce_sum(exp(x))
.
Wartości wejściowe w są log-odds wynikowego prawdopodobieństwa.
Argumenty
- x : Tensor wejściowy.
- axis: Integer, oś wzdłuż której stosowana jest normalizacja softmax.
Returns
Tensor, wyjście transformacji softmax (wszystkie wartości są nieujemne i sumują się do 1).
Raises
- ValueError: W przypadku
dim(x) == 1
.
funkcja softplus
tf.keras.activations.softplus(x)
Funkcja aktywacji softplus, softplus(x) = log(exp(x) + 1)
.
Przykładowe użycie:
Argumenty
- x: Input tensor.
Returns
- Aktywacja softplus:
log(exp(x) + 1)
.
funkcja softsign
tf.keras.activations.softsign(x)
Funkcja aktywacji softsign, softsign(x) = x / (abs(x) + 1)
.
Przykładowe użycie:
>>> a = tf.constant(, dtype = tf.float32)>>> b = tf.keras.activations.softsign(a)>>> b.numpy()array(, dtype=float32)
Argumenty
- x: Input tensor.
Returns
- Aktywacja softsignu:
x / (abs(x) + 1)
.
funkcja tanh
tf.keras.activations.tanh(x)
Funkcja aktywacji tangensa hiperbolicznego.
Na przykład:
Argumenty
- x: Tensor wejściowy.
Wraca
- Tensor o tym samym kształcie i dtypie wejścia
x
, z aktywacją tanh:tanh(x) = sinh(x)/cosh(x) = ((exp(x) - exp(-x))/(exp(x) + exp(-x)))
.
funkcja selu
tf.keras.activations.selu(x)
Scaled Exponential Linear Unit (SELU).
Funkcja aktywacji SELU (Scaled Exponential Linear Unit) jest zdefiniowana jako:
if x > 0: return scale * x
if x < 0: return scale * alpha * (exp(x) - 1)
gdzie alpha
i scale
są wstępnie zdefiniowanymi stałymi (alpha=1.67326324
i scale=1.05070098
).
Podstawowo, funkcja aktywacji SELU mnoży scale
(> 1) z wyjściem funkcji tf.keras.activations.elu
, aby zapewnić nachylenie większe niż jeden dla dodatnich danych wejściowych.
Wartości alpha
i scale
są tak dobrane, że średnia i wariancja wejść są zachowane pomiędzy dwoma kolejnymi warstwami tak długo, jak wagi są poprawnie zainicjalizowane (zobacz inicjalizator tf.keras.initializers.LecunNormal
) i liczba jednostek wejściowych jest „wystarczająco duża” (więcej informacji w referacie).
Przykładowe użycie:
Argumenty
- x: Tensor lub zmienna do obliczenia funkcji aktywacji dla.
Wraca
- Skalowana wykładnicza aktywacja jednostkowa:
scale * elu(x, alpha)
.
Notes: – Do stosowania razem z inicjalizatorem tf.keras.initializers.LecunNormal
. – Do użycia razem z wariantem zrzutu tf.keras.layers.AlphaDropout
(nie regularny zrzut).
Referencje: – Klambauer et al., 2017
funkcja elu
tf.keras.activations.elu(x, alpha=1.0)
Eksponencjalna jednostka liniowa.
Eksponencjalna jednostka liniowa (ELU) z alpha > 0
to:x
jeśli x > 0
ialpha * (exp(x) - 1)
jeśli x < 0
Hiparametr ELU alpha
kontroluje wartość, do której anELU nasyca się dla ujemnych wejść netto. ELU zmniejszają efekt zanikającego gradientu.
ELU mają wartości ujemne, które przesuwają średnią aktywacji bliżej zera. Średnia aktywacji bliższa zeru umożliwia szybsze uczenie, ponieważ przybliża gradient do gradientu naturalnego.ELU nasycają się do wartości ujemnej, gdy argument staje się mniejszy.Nasycenie oznacza małą pochodną, która zmniejsza zmienność i informację, która jest propagowana do następnej warstwy.
Przykład użycia:
Argumenty
- x: Tensor wejściowy.
- alfa: Skalar, nachylenie odcinka ujemne.
alpha
kontroluje wartość, do której ELU nasyca się dla ujemnych wejść sieci.
Powraca
- Funkcja aktywacji wykładniczej jednostki liniowej (ELU):
x
jeślix > 0
ialpha * (exp(x) - 1)
jeślix < 0
.
Referencje: Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs) (Clevert et al, 2016)
funkcja wykładnicza
tf.keras.activations.exponential(x)
Ekspresyjna funkcja aktywacji.
Na przykład:
Argumenty
- x: Input tensor.
Returns
- Tensor z aktywacją wykładniczą:
exp(x)
.
Tworzenie niestandardowych aktywacji
Można również użyć wywołania TensorFlow jako aktywacji(w tym przypadku powinno ono przyjmować tensor i zwracać tensor o tym samym kształcie i dtypie):
model.add(layers.Dense(64, activation=tf.nn.tanh))
O warstwach „zaawansowanej aktywacji”
Aktywacje, które są bardziej złożone niż prosta funkcja TensorFlow (np. aktywacje uczące się, które utrzymują stan) są dostępne jako zaawansowane warstwy aktywacji i można je znaleźć w module tf.keras.layers.advanced_activations
. Należą do nich PReLU
i LeakyReLU
.Jeśli potrzebujesz niestandardowej aktywacji, która wymaga stanu, powinieneś zaimplementować ją jako niestandardową warstwę.
Zauważ, że nie powinieneś przekazywać instancji warstw aktywacji jako argumentu activation
warstwy.Są one przeznaczone do użycia tak jak zwykłe warstwy, np.