В настоящее время я пытаюсь обучить систему ИИ играть в классическую 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 правильным образом, так что остальная часть обучения работает?