質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

OpenAI gymのenv.render()がうまく動かない

linkinpark
linkinpark

総合スコア38

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2回答

0リアクション

0クリップ

302閲覧

投稿2022/09/26 13:46

前提

現在理解を深めるためにpytorchのチュートリアルを基に自分でDQNの実装を行っているのですが
env.render()を実行した際にエラーが発生していました。
どなたか教えていただきたいです。
よろしくお願いいたします。
注 プログラムは余計な部分を省いています。
必要がありましたら追記いたします。

実現したいこと

ここに実現したいことを箇条書きで書いてください。
DQNに画像を入力させたいのでenv.render()を動作させたい。

発生している問題・エラーメッセージ

エラーメッセージ File "C:\Users\zxyv_\reinforcement Learning\dqn_original.py", line 109, in <module> init_screen=get_screen(env) File "C:\Users\zxyv_\reinforcement Learning\dqn_original.py", line 57, in get_screen screen=env.render().transpose((2,0,1)) File "C:\Users\zxyv_\anaconda3\lib\site-packages\gym\envs\classic_control\cartpole.py", line 179, in render from gym.envs.classic_control import rendering File "C:\Users\zxyv_\anaconda3\lib\site-packages\gym\envs\classic_control\rendering.py", line 27, in <module> from pyglet.gl import * File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\gl\__init__.py", line 236, in <module> import pyglet.window File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\window\__init__.py", line 1816, in <module> gl._create_shadow_window() File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\gl\__init__.py", line 205, in _create_shadow_window _shadow_window = Window(width=1, height=1, visible=False) File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\window\win32\__init__.py", line 131, in __init__ super(Win32Window, self).__init__(*args, **kwargs) File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\window\__init__.py", line 493, in __init__ display = get_platform().get_default_display() File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\window\__init__.py", line 1765, in get_default_display return pyglet.canvas.get_display() File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\canvas\__init__.py", line 77, in get_display from pyglet.app import displays File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\app\__init__.py", line 177, in <module> event_loop = EventLoop() File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\app\base.py", line 116, in __init__ self.clock = clock.get_default() File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\__init__.py", line 357, in __getattr__ __import__(import_name) File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\clock.py", line 165, in <module> _default_time_function = time.clock AttributeError: module 'time' has no attribute 'clock'

該当のソースコード

Python

ソースコード from configparser import Interpolation from pickletools import optimize from statistics import mean import gym import math import random import numpy as np import matplotlib import matplotlib.pyplot as plt from collections import namedtuple, deque from itertools import count from PIL import Image import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torchvision import datasets,transforms#データの前処理に必要なモジュール import torchvision.transforms as T env = gym.make('CartPole-v0').unwrapped # if gpu is to be used device = torch.device("cuda" if torch.cuda.is_available() else "cpu") #環境内の単一の遷移を表す名前付きタプル Transition=namedtuple('Transition',('state','action','nextstate','reward')) #経験を保存するためのバッファ。バッチを取得するためのサンプルメソッドも実装 class ReplayMemory(object): #capacityはバッファの容量 def __init__(self,capacity): self.memory=deque([],maxlen=capacity) def push(self,*args): #Save a taransition self.memory.append(Transition(*args)) def sample(self,batch_size): return random.sample(self.memory,batch_size) def __lem__(self): return len(self.memory) def get_cart_location(screen_width): world_width=env.x_threshold*2 scale=screen_width/world_width return int(env.state[0]*scale+screen_width/2.0)#Middle of cart def get_screen(env): # ジムからリクエストされた返却画面は 400x600x3 ですが、 # 800x1200x3 のように大きい場合もあります。それをトーチ オーダー (HWCからCHW) に置き換えます。 screen=env.render().transpose((2,0,1)) # カートは下半分にあるので、画面の上下をはがします _,screen_height,screen_width=screen.shape screen=screen[:,int(screen_height*0.4):int(screen_height*0.8)] view_width=int(screen_width*0.6) cart_location=get_cart_location(screen_width) if cart_location<view_width//2: slice_range=slice(view_width) elif cart_location>(screen_width-view_width//2): slice_range=slice(-view_width,None) else: slice_range=slice(cart_location-view_width//2,cart_location+view_width//2) # カートを中心とした正方形の画像になるように、端を取り除きます screen=screen[:, :,slice_range] # float への変換、再スケーリング、torch tensor への変換 screen=np.ascontiguousarray(screen,dtype=np.float32)/255 screen=torch.from_numpy(screen) # サイズを変更し、バッチ ディメンションを追加します (BCHW) return resize(screen).unsqueeze(0) class DQN(nn.Module): def __init__(self,h,w,outputs): super(DQN,self).__init__() self.conv1=nn.Conv2d(3,16,kernel_size=5,stride=2) self.bn1=nn.BatchNorm2d(16) self.conv2=nn.Conv2d(16,32,kernel_size=5,stride=2) self.bn2=nn.BatchNorm2d(32) self.conv3=nn.Conv2d(32,32,kernel_size=5,stride=2) self.bn3=nn.BatchNorm2d(32) #畳み込み層からの出力を全結合層に入力するためのサイズを計算している def conv2d_size_out(size,kernel_size=5,stride=2): return (size-(kernel_size-1)-1)//stride +1 convw=conv2d_size_out(conv2d_size_out(conv2d_size_out(w))) convh=conv2d_size_out(conv2d_size_out(conv2d_size_out(h))) linear_input_size=convw*convh*32 self.head=nn.Linear(linear_input_size,outputs) def forward(self,x): x=x.to(device) x=F.relu(self.bn1(self.conv1(x))) x=F.relu(self.bn2(self.conv2(x))) x=F.relu(self.bn3(self.conv3(x))) return self.head(x.view(x.size(0),-1))#わからない memory=ReplayMemory(10000) steps_done=0 init_screen=get_screen(env) _,_,screen_height,screen_width=init_screen.shape

試したこと

ここに問題に対して試したことを記載してください。
env = gym.make('CartPole-v0')をenv = gym.make('CartPole-v0').unwrappedに変更してみたり
自分で調べたりしたのですが、わからず質問させていただきました。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

jbpb0

2022/09/26 18:23

> File "C:\Users\zxyv_\anaconda3\lib\site-packages\pyglet\clock.py", line 165, in <module> _default_time_function = time.clock AttributeError: module 'time' has no attribute 'clock' 「pyglet」をアップデートしたら直るみたいです https://github.com/pyglet/pyglet/issues/114
linkinpark

2022/09/29 08:15

返事が遅れてしまい大変申し訳ございません。 ご回答いただきありがとうございます。修正することができ次第ご報告させていただきます。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。