Пользовательская функция активации керас для разных нейронов - PullRequest
1 голос
/ 18 октября 2019

У меня есть собственный слой keras, и я должен создать свою собственную функцию активации. Можно ли поместить фиксированные активации для разных нейронов в одном слое? Например, допустим, у меня есть что-то вроде плотного слоя с 3 юнитами, и я хочу, чтобы активация первого юнита была рефлю, второго - танхом, а третьего - сигмоидом;независимо от значения x, так что это не нормально:

def myactivation(x):
    if x something:
        return relu(x)
    elif something else :
        return another_activation(x)

Что я хочу сделать, это применить активацию к определенному нейрону как

def myactivation(x):
    if x == neuron0:
        return relu(x)
    elif x == neuron1:
        return tanh(x)
    else:
        return sigmoid(x)

Возможно ли это? Или есть другой способ реализовать что-то подобное?

1 Ответ

1 голос
/ 18 октября 2019
import keras.backend as K

def myactivation(x):
    #x is the layer's output, shaped as (batch_size, units)

    #each element in the last dimension is a neuron
    n0 = x[:,0:1]
    n1 = x[:,1:2]
    n2 = x[:,2:3]  #each N is shaped as (batch_size, 1)

    #apply the activation to each neuron
    x0 = K.relu(n0)
    x1 = K.tanh(n1)
    x2 = K.sigmoid(n2)

    return K.concatenate([x0,x1,x2], axis=-1) #return to the original shape 
...