web-dev-qa-db-ja.com

Kerasでカスタムアクティベーション関数を作成するにはどうすればよいですか?

ReLU、tanh、softmaxなどのデフォルトの 標準アクティベーション と、LeakyReLUのような 高度なアクティベーション では不十分な場合があります。また、 keras-contrib にない場合もあります。

独自のアクティベーション関数をどのように作成しますか?

28
Martin Thoma

この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のメモ を参照してください。

46
Martin Thoma

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))
10
Eponymous

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'))
2
Julien Nyambal