Иногда стандартных стандартных активаций, таких как ReLU, tanh, softmax,... и расширенных активаций, таких как LeakyReLU, недостаточно. И это также может быть не в keras-contrib.
Как вы создаете свою собственную функцию активации?
Иногда стандартных стандартных активаций, таких как ReLU, tanh, softmax,... и расширенных активаций, таких как LeakyReLU, недостаточно. И это также может быть не в keras-contrib.
Как вы создаете свою собственную функцию активации?
Авторы этого комментария к выпуску Github от Ritchie Ng.
# Creating a model
from keras.models import Sequential
from keras.layers import Dense
# Custom activation function
from keras.layers import Activation
from keras import backend as K
from keras.utils.generic_utils import get_custom_objects
def custom_activation(x):
return (K.sigmoid(x) * 5) - 1
get_custom_objects().update({'custom_activation': Activation(custom_activation)})
# Usage
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation(custom_activation, name='SpecialActivation'))
print(model.summary())
Имейте в виду, что эту функцию необходимо импортировать при сохранении и восстановлении модели. Смотрите заметку о keras-contrib.
Немного проще, чем ответ Мартина Тома: вы можете просто создать собственную элементную бэкэнд-функцию и использовать ее в качестве параметра. Вам все еще нужно импортировать эту функцию перед загрузкой вашей модели.
from keras import backend as K
def custom_activation(x):
return (K.sigmoid(x) * 5) - 1
model.add(Dense(32 , activation=custom_activation))
Допустим, вы хотели бы добавить swish
или gelu
в gelu
, предыдущие методы - это хорошие встроенные вставки. Но вы также можете вставить их в набор функций активации keras, чтобы вызывать пользовательскую функцию, как если бы вы вызывали ReLU
. Я проверил это с помощью keras 2.2.2 (подойдет любой v2). Добавьте в этот файл $HOME/anaconda2/lib/python2.7/site-packages/keras/activations.py
определение вашей пользовательской функции (может отличаться для вашей версии python и anaconda).
В керасе внутреннее:
$HOME/anaconda2/lib/python2.7/site-packages/keras/activations.py
def swish(x):
return (K.sigmoid(beta * x) * alpha *x)
Тогда в вашем файле Python:
$HOME/Documents/neural_nets.py
model = Sequential()
model.add(Activation('swish'))