Как понять лямбда-слой Keras? - PullRequest
0 голосов
/ 05 октября 2019

Я новичок в лямбда-выражениях Keras и мне нужно понять, как они работают.

Я хочу реализовать уравнение для Dueling DQN (вторая сеть). Вот изображение:

enter image description here

Я разделил свою сеть на две части - A и V. В моем случае часть A имеет 4 выхода (нейроны)и часть V имеет только один выход.

Теперь мне нужно реализовать уравнение из изображения (справа внизу).

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

x[0] представляет четыре нейрона из части A

x[1] представляет один нейрон из части V

На выходе должно быть 4 нейрона

x = y = Input(shape=(input_dims,))
y = Dense(256)(x)
y = Activation('relu')(y)
y = Dense(256)(x)
y = Activation('relu')(y)

v = Dense(1)(y)

a = Dense(n_actions)(y)

y = Lambda(lambda x: x[0] + x[1] - K.mean(x[0]), output_shape=(4,))([a, v])

model = Model(x, y)
model.compile(optimizer=Adam(lr=lr), loss='mse')

Эквивалент лямбда-функции - это цикл:

Q = numpy.zeroes((4,))     #output of neural nework
for i in range(4):
  Q[i] = a[i] + v[0] - mean(A)

Правильно ли я это сделал или не понимаю лямбда-выражения в Керасе? Если я не правильно написал это уравнение, вы можете мне его объяснить?

Спасибо за ваши рекомендации!

...