OpenAI Gymで一定間隔のエピソードごとに動画を保存する方法
gym環境で動画を保存する際には以下のようにすれば,一応指定したフォルダに動画を保存することができる.
参考:
discuss.openai.com
import gym from gym import wrappers env = gym.make(‘CartPole-v0’) env = wrappers.Monitor(env, ‘/path/to/movie_folder’)
このようにすれば,メソッドを呼ばなくても勝手にある間隔で動画が保存される.
しかし,エピソード数が0,1,8,27,64,125,216,343…となぜかごとに保存されている.
なぜ?
よく分からずGitHubのコードを眺めていると原因が判明した.
github.com
デフォルトで指定されているvideo_callableはcapped_cubic_video_scheduleという内部で用意されている関数が指定されている.これが上述のエピソードごとに動画を保存するよう決定していた.
そこで,引数でvideo_callableを自分が確認したいエピソードごとに指定するようにしてやればいい.
以下は100エピソードごと動画を保存するにしたパターン.
import gym from gym import wrappers env = gym.make(‘CartPole-v0’) env = wrappers.Monitor(env, ‘/path/to/movie_folder’, video_callable=(lambda ep: ep % 100 == 0))
これにより保存間隔を変更することができた.