Я создал собственный env, используя в качестве родительского класса gym.Env, и все работает хорошо на одном ядре. Я запустил код следующим образом:
class MyEnv(gym.Env):
....
Но если я попытаюсь использовать SubprocVecEnv для ускорения процесса обучения с использованием всех моих 24 ядер ЦП, я получаю сообщение: ValueError: не удалось передать массив ввода из формы (24,24) в форму (24,1) em>
Я тестировал DummyVecEnv, и он работает хорошо, но поскольку эта функция не поддерживает многопроцессорность, я хотел бы использовать SubprocVecEnv, как я обычно это делаю с окружениями Atari / Gym.
PS: мой пользовательский env очень прост, в основном я использую набор данных с 567 строками и 4 столбцами, агент посещает одну строку за раз и прогнозирует два значения из этого наблюдения. Наблюдение_пространство и действие_пространство следующие:
self.observation_space = spaces.Box(low=1, high=1, shape=(1,4), dtype=np.float64)
self.action_space = spaces.Box(low=np.array([0., -1.]), high=np.array([2., 1.]), dtype=np.float64)
Я тренирую агента, используя PPO2, исходя из стабильных исходных значений, как я обычно делаю.
Я упустил что-то важное?