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のメモ を参照してください。
Martin Thomaの答え よりも少し単純です:カスタムの要素ごとのバックエンド関数を作成し、それをパラメーターとして使用することができます。モデルをロードする前に、この関数をインポートする必要があります。
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
をkerasに追加するとします。以前の方法はNiceインライン挿入です。しかし、ReLU
を呼び出すのと同じようにカスタム機能を呼び出すように、kerasアクティベーション関数のセットにそれらを挿入することもできます。これをkeras 2.2.2でテストしました(どのv2でも実行できます)。このファイルに追加$HOME/anaconda2/lib/python2.7/site-packages/keras/activations.py
カスタム関数の定義(異なる場合がありますpython and anaconda version)。
ケラス内部:
$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'))