Я реализовал пользовательскую среду в стиле сред OpenAi Gym, в которой у меня есть фигуры (круги, квадраты и т. Д.), Которые я могу перемещать по плоскости внутри границы.Я хочу применить к этой задаче алгоритмы обучения с подкреплением, такие как REINFORCE, и создал собственную функцию вознаграждения.Но теперь у меня возникли проблемы при проектировании нейронной сети, которая бы принимала состояние и выводила действие.
Чтобы представить некоторые сведения о моих настройках действия состояния.Для состояния я использую 2d-массив, описывающий тип фигуры (круг, квадрат и т. Д.) В виде одного горячо закодированного массива, а также положение (координаты x, y краев ограничительной рамки) и поворот формы (0 - 360) и иметь ряд для каждой фигуры в данный момент на плоскости.Для действия у меня есть 1d-массив с индексом формы для выбора и новой позиции и вращения.Я начал с объединения 2d-массива в один массив, затем со скрытым слоем, а затем разветвил на 3 выхода: Mu и Sigma для распределения вероятностей непрерывного вывода и вероятностей для выбора индекса фигур.
class Model(tf.keras.Model):
def __init__(self, action_pair, input_shape):
super().__init__('mlp_policy')
self.input = kl.Input(shape=input_shape)
self.flat = kl.Flatten()(self.input)
self.hidden = kl.Dense(128, activation='relu')(self.flat)
# action_pair is a tuple with the size of the categorical output and the continuous output
self.index = kl.Dense(action_pair[0], activation='softmax', name='index')(self.hidden)
self.mu_branch = kl.Dense(action_pair[1], activation='tanh', name='mu')(self.hidden)
self.sigma_branch = kl.Dense(action_pair[1], activation='softplus', name='sigma')(self.hidden)
def call(self, inputs):
x = self.input(inputs)
x = self.flat(x)
hid = self.hidden(x)
index = self.index(hid)
mu = self.mu_branch(hid)
sigma = self.sigma_branch(hid)
return index_prob, mu, sigma
Я не знаю, как я должен обрабатывать логарифмические вероятности для функции потерь, потому что обычно я использовал бы mu и sigma для вычисления логарифмического вероятности, но теперь я должен также включить категориальные вероятности.Правильно ли предсказывать индекс, мю и сигму с помощью одной нейронной сети?Я только вхожу в RL, спасибо заранее