OpenAI Gym のカスタム環境クラスをつくったのだが、
環境クラス内部でエピソード番号を表示させたくなった。
そこで
step()の戻り値の一つinfoが特に型が決まっていないので
__init__()内で辞書self.infoを作ってその中にカウンタ用の
整数を入れてreset()が呼び出されるたびに加算するように
実装した。
以下のコードは、独自環境クラスの例である。
class TestEnv(gym.Env):
def __init__(self):
super().__init__()
self.action_space = gym.spaces.Box(
low= -1, high=+1, shape=(3,), dtype=np.float32)
self.observation_space = gym.spaces.Box(
low=0, high=255, shape=(120, 160, 3), dtype=np.uint8)
self.info = {
'episode': 1,
}
def reset(self):
self.info['episode'] += 1
return np.zeros(shape=(120, 160, 3))
def step(self, action):
return np.zeros(shape=(120, 160, 3)), 1.0, True, self.info
そして、以下のように強化学習トレーニングを実行しようとした。
env = TestEnv()
from stable_baselines3 import SAC
model = SAC('CnnPolicy', env, verbose=1, tensorboard_log='./logs')
model.learn(total_timesteps=4096)
すると..
C:\Users\XXXXX\Anaconda3\envs\gym_donkey\lib\site-packages\torch\cuda\__init__.py:52: UserWarning: CUDA initialization: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Triggered internally at ..\c10\cuda\CUDAFunctions.cpp:100.)
return torch._C._cuda_getDeviceCount() > 0
Using cpu device
Wrapping the env in a DummyVecEnv.
Wrapping the env in a VecTransposeImage.
Logging to ./logs\PPO_1
Traceback (most recent call last):
File "tests\test_gym.py", line XX, in <module>
test_learn_ppo()
File "tests\test_gym.py", line XX, in test_learn_ppo
model.learn(total_timesteps=4096)
File "C:\Users\XXXXXX\Anaconda3\envs\gym_donkey\lib\site-packages\stable_baselines3\ppo\ppo.py", line 264, in learn
reset_num_timesteps=reset_num_timesteps,
File "C:\Users\XXXXXX\Anaconda3\envs\gym_donkey\lib\site-packages\stable_baselines3\common\on_policy_algorithm.py", line 234, in learn
if len(self.ep_info_buffer) > 0 and len(self.ep_info_buffer[0]) > 0:
TypeError: object of type 'int' has no len()
(gym) D:\projects\hogegoge>
そこでカスタム環境クラスのself.infoで扱う'episode'キーワードを
別のラベルに変更すると..正常動作するようになった...
どうも、親クラスでself.infoを使っていて
しかもOpenAI Gym内部で'episode'キーワードを使っているらしく
想定外の型(上記例ではstr)が入っていてエラーになってしまったらしい..
Stable Baselines3 はドキュメントが充実しているのが売りだったはずなのに..
..公式ドキュメントに、書いててほしかった..
仕事上でわかったことのうち顧客に関わる情報が無い物、一般公開して差し障りのなさそうな事をたまーに投稿しています。 ちなみに、記事上に載せた私が書いたコードは、用途問わず再利用いただいてかまいませんが、保障は一切いたしませんので、あしからず。 ですます調の記事とである調の記事が混ざりますが..こちらも、あしからず。
Translate
2021年3月17日水曜日
OpenAI Gym カスタム環境のinfoに"episode"というキーで値を入れたら1回目のミニバッチ終了時にTypeErrorが発生する件
登録:
コメントの投稿 (Atom)
bolt.new をローカルPC(Windows10)で動かす
生成AIによるコード生成ツールはだいぶ進化しており、 ユーザ要件を入力するとJavaScript/TypeScriptコードにしてくれる サービスが登場し始めた。 特に、 bolt.new はOSS(MITライセンス)があり ローカルPCで動作するとのこと。 ただ生成AIモデルは...
0 件のコメント:
コメントを投稿