Можно ли сначала инициализировать слои в нейронных новых работах, а затем добавить активации? - PullRequest
0 голосов
/ 28 февраля 2020

например, у меня есть последовательная модель с тремя слоями.

model_loc = tf.keras.Sequential()

Этот фрагмент ниже представляет собой обычный способ добавления слоев в модель и применения активации

model.add(Dense(10, input_dim=3, activation=tf.nn.tanh))
model.add(Dense(10, activation=tf.nn.tanh))
model.add(Dense(4))

Возможно ли применить функцию активации после добавления каждого слоя? Примерно так:

model.add(Dense(10, input_dim=3))
model.add(activation=tf.nn.tanh))

model.add(Dense(10))
model.add(activation=tf.nn.sigmoid))

model.add(Dense(4))

Буду признателен за любую помощь!

1 Ответ

1 голос
/ 01 марта 2020

Именно поэтому keras предоставляет слой Activation:

model.add(Dense(10, input_dim=3))
model.add(Activation("tanh"))

model.add(Dense(10))
model.add(Activation("sigmoid"))

model.add(Dense(4))

РЕДАКТИРОВАТЬ


Если вы хотите использовать пользовательские активации, вы можете использовать одну из трех различных методы.

Предположим, вы переопределяете сигмоид:

def my_sigmoid(x):
    return 1 / (1 + tf.math.exp(-x))
  1. Использование Activation layer:

    model.add(Activation(my_sigmoid))
    
  2. Используйте слой Lambda:

    model.add(Lambda(lambda x: 1 / (1 + tf.math.exp(-x))))
    
  3. Определите пользовательский Layer:

    class MySigmoid(Layer):
    
        def __init__(*args, **kwargs):
            super().__init__(*args, **kwargs)
    
        def call(inputs, **kwargs):
            return 1 / (1+tf.math.exp(-inputs))
    
    model.add(MySigmoid)
    

Метод 3 особенно полезен для Параметр c активаций, например PReLU.

Метод 2 - это быстрое исправление для тестирования, но лично мне нравится избегать его.

Метод 1 - это способ go для простых функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...