tf_agents: conv_layer_params и правильная размерность - PullRequest
0 голосов
/ 07 февраля 2020

В настоящее время я пытаюсь обучить систему ИИ играть в классическую c игру змею (двумерная доска, ест пищу и растет дольше). Я создал функционирующую среду tf_agents. Мое наблюдение c выглядит следующим образом:

TimeStep(step_type=array(0), reward=array(0., dtype=float32), discount=array(1., dtype=float32), observation=array([[ 0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0, -1,  0,  0,  0,  0],
       [ 0,  0,  0,  1,  0,  0,  0,  0],
       [ 0,  0,  0,  1,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0]]))

, где -1 - голова змеи, а 1 - тело. Сейчас во время тренировок я хочу использовать CNN на наблюдении. Тем не менее, когда я делаю следующее:

conv_layer_params=[(8, 2, 2), (6, 2, 2)]
q_net = QNetwork(
    tf_env.observation_spec(),
    tf_env.action_spec(),
    conv_layer_params=conv_layer_params,
    ...
    ...)
agent = DqnAgent(tf_env.time_step_spec(),
                 tf_env.action_spec(),
                 q_network=q_net,
                 ...
                 ...)
agent.initialize()

я получаю следующую ошибку:

ValueError: Input 0 of layer EncodingNetwork/conv2d is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [0, 8, 8]
  In call to configurable 'DqnAgent' (<function DqnAgent.__init__ at 0x000001EC9142F048>)

Как правильно расширить измерения наблюдения_сп c? В частности, есть ли обертка, которую я могу использовать в своей среде , которая расширит размер моего наблюдения spe c правильным образом, так что остальная часть обучения работает?

...