Проблема с керасом, функциональным API и неплотным реле - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь использовать неплотный рэлу. Я пытался использовать mtd, заданный

Функциональный API Keras и активации

Это не работает. Я получил ошибку:

Ошибка типа: активация () отсутствует 1 обязательный позиционный аргумент: 'тип_ активации'

Кроме того, должна ли активация быть прописной или нет?

Я ее использую как:

def activation(x, activation_type):
    if activation_type == 'leaky_relu':
        return activations.relu(x, alpha=0.3)
    else:
        return activations.get(activation_type)(x)
...

input_data = layers.Input(shape=(3,))
...
hiddenOut = Dense(units=2)(input_data)
hiddenOut = activation(lambda hiddenOut: activation(hiddenOut, 'LeakyReLU'))(hiddenOut)
u_out = Dense(1, activation='linear', name='u')(hiddenOut)   
...

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Вы делаете что-то очень сложное, вы можете просто

hiddenOut = keras.layers.LeakyReLU(alpha=0.3)(hiddenOut)
1 голос
/ 07 апреля 2020
import keras

def my_activation(x, activation_type):
    if activation_type == 'LeakyReLU':
        return keras.activations.relu(x, alpha=0.3)
    else:
        return keras.activations.get(activation_type)(x)

input_data = keras.layers.Input(shape=(3,))
hiddenOut = keras.layers.Dense(units=2)(input_data)
hiddenOut = keras.layers.Activation(lambda hiddenOut: my_activation(hiddenOut, 'LeakyReLU'))(hiddenOut)

Почему

  • Activation - это слой, а activations - это набор доступных активаций.
  • Чтобы подражать Leaky ReLu, мы должны изменить наклон отрицательной части. Для ReLu наклон составляет 0, и его можно изменить с помощью параметра alpha.
  • Что мы делаем, так это напишем функцию-обертку с именем my_activation, которая будет возвращать Leaky ReLu с отрицательным наклоном 0.3, если параметр равен LeakyReLU, иначе он вернет нормальную активацию.

Пример:

input_data = keras.layers.Input(shape=(3,))
a = keras.layers.Dense(units=2)(input_data)
a = keras.layers.Activation(lambda hiddenOut: my_activation(hiddenOut, 'LeakyReLU'))(a)
a = keras.layers.Activation(lambda hiddenOut: my_activation(hiddenOut, 'sigmoid'))(a)
a = keras.layers.Activation(lambda hiddenOut: my_activation(hiddenOut, 'tanh'))(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...