keras NN: изменить размер выходного слоя, сохранив прогнозирование постоянным / инициализировать функцию действия значения функцией значения - PullRequest
0 голосов
/ 15 апреля 2019

Я обучил простую последовательную модель для оценки функции стоимости для конкретной политики в обучающей программе подкрепления. Для данного состояния NN возвращает одномерное значение для фиксированной политики. Я хочу использовать эту модель в качестве инициализации для функции действия значения, где на входе находится одно и то же состояние и возвращен N-мерный вектор для действий {a_1, ..., a_N}. Поскольку первая сеть - это мое первое предположение, я хочу, чтобы значение, которое она возвращает для N возможных действий (Q [s_t, a_1], Q [s_t, a_2]), было равно значению функции при фиксированной политике (Q [s_t], перед дальнейшим обучением), т.е. Q [s_t] = Q [s_t, a_1] = Q [s_t, a_2].

Это моя сеть для фиксированной политики:

model = Sequential()
model.add(InputLayer(input_shape = (3))) #0,0: hour; 0,1: congestion
model.add(Dense(50, input_shape = input_shape, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(150, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

Я пытался изменить его с помощью

model.pop()
model.add(Dense(3,activation='sigmoid'))
model.build()

Но тогда функция все равно вернула одномерный вектор.

Я тоже пытался

new_model = Sequential()
new_model.add(InputLayer(input_shape = (3)))
new_model.add(model.layers[0])
new_model.add(model.layers[1])
new_model.add(model.layers[2])
new_model.add(Dense(3, activation='sigmoid'))

Теперь я получил возвращенный 3D-массив, но значения значительно отличались от значений, предсказанных другой моделью.

Что мне не хватает или есть способ сделать это лучше, например путем прямой инициализации новой модели с помощью прогнозов более старой модели? Спасибо за вашу помощь!

...