Я создаю настраиваемую функцию активации, в частности функцию активации RBF:
from keras import backend as K
from keras.layers import Lambda
l2_norm = lambda a,b: K.sqrt(K.sum(K.pow((a-b),2), axis=0, keepdims=True))
def rbf2(x):
X = #here i need inputs that I receive from previous layer
Y = # here I need weights that I should apply for this layer
l2 = l2_norm(X,Y)
res = K.exp(-1 * gamma * K.pow(l2,2))
return res
Функция rbf2
принимает на вход предыдущий слой:
#some keras layers
model.add(Dense(84, activation='tanh')) #layer1
model.add(Dense(10, activation = rbf2)) #layer2
Что мне делать, чтобы получить входные данные от layer1
и веса от layer2
для создания настраиваемой функции активации?
На самом деле я пытаюсь реализовать выходной слой для нейронной сети LeNet5. Выходной слой LeNet-5 немного особенный: вместо вычисления скалярного произведения входных данных и вектора весов каждый нейрон выводит квадрат евклидова расстояния между его входным вектором и вектором весов.
Например, в layer1
84 нейрона, а в layer2
10 нейронов. В общих случаях для расчета выходных данных для каждого из 10 нейронов layer2
мы производим скалярное произведение 84 нейронов с layer1
и 84 весами между layer1
и layer2
. Затем мы применяем к нему softmax
функцию активации.
Но здесь, вместо скалярного произведения, каждый нейрон layer2
выводит квадрат евклидова расстояния между его входным вектором и вектором веса (я хочу использовать это в качестве своей функции активации).
Также полезна любая помощь по созданию функции активации RBF (вычисление евклидова расстояния от входных данных, которые получает слой и весов) и ее использование в слое.
layer1
иlayer2
и передать его своей функции rbf? Если это так, то уверены ли вы, что это будет работать с текущим определением вашей функции активации, поскольку они имеют разные формы? - person today   schedule 19.12.2018layer1
и веса каждого нейронаlayer2
. и я хочу вычислить евклидово расстояние между ними. - person Vamshi Pulluri   schedule 20.12.2018