针对不同神经元的自定义keras激活函数
Custom keras activation function for different neurons
我有一个自定义的 keras 层,我必须创建我的自定义激活函数。是否可以将不同神经元的固定激活放在同一层中?
例如,假设我有一个包含 3 个单元的密集层,我希望第一个单元的激活是 relu,第二个是 tanh,第三个是 sigmoid;独立于 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)
这可能吗?或者还有另一种方法可以实现这样的功能?
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
我有一个自定义的 keras 层,我必须创建我的自定义激活函数。是否可以将不同神经元的固定激活放在同一层中? 例如,假设我有一个包含 3 个单元的密集层,我希望第一个单元的激活是 relu,第二个是 tanh,第三个是 sigmoid;独立于 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)
这可能吗?或者还有另一种方法可以实现这样的功能?
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