Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- gs25
- 편스토랑 우승상품
- 코로나19
- dacon
- 자연어처리
- github
- hackerrank
- 편스토랑
- Git
- 금융문자분석경진대회
- 더현대서울 맛집
- leetcode
- 맥북
- Real or Not? NLP with Disaster Tweets
- 캐치카페
- AI 경진대회
- PYTHON
- 프로그래머스
- 파이썬
- 백준
- SW Expert Academy
- Kaggle
- 데이콘
- Baekjoon
- ubuntu
- Docker
- programmers
- ChatGPT
- 우분투
- 프로그래머스 파이썬
Archives
- Today
- Total
솜씨좋은장씨
Google Colab에서 OpenAI SpaceInvaders-Atari2600 오류 없이 실행하는 방법! 본문
머신러닝 | 딥러닝/강화학습
Google Colab에서 OpenAI SpaceInvaders-Atari2600 오류 없이 실행하는 방법!
솜씨좋은장씨 2021. 6. 7. 23:05728x90
반응형
유튜브를 보면서 SpaceInvaders-v0 을 Google Colab에서 따라해보던 중
import gym
env = gym.make("SpaceInvaders-v0")
위의 코드를 실행하면
Exception Traceback (most recent call last)
<ipython-input-25-ef7bdae7e19a> in <module>()
----> 1 env = gym.make("SpaceInvaders-v0")
4 frames
/content/atari-py/atari_py/games.py in get_game_path(game_name)
18 path = os.path.join(_games_dir, game_name) + ".bin"
19 if not os.path.exists(path):
---> 20 raise Exception('ROM is missing for %s, see https://github.com/openai/atari-py#roms for instructions' % (game_name,))
21 return path
22
Exception: ROM is missing for space_invaders, see https://github.com/openai/atari-py#roms for instructions
Exception: ROM is missing for space_invaders, see https://github.com/openai/atari-py#roms for instructions
위와 같은 오류가 계속 발생했습니다.
여러 GitHub Issue와 Stack Overflow를 참고하여 해결한 방법을 공유해보려합니다.
!wget http://www.atarimania.com/roms/Roms.rar
--2021-06-07 12:34:43-- http://www.atarimania.com/roms/Roms.rar
Resolving www.atarimania.com (www.atarimania.com)... 195.154.81.199
Connecting to www.atarimania.com (www.atarimania.com)|195.154.81.199|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11128004 (11M) [application/x-rar-compressed]
Saving to: ‘Roms.rar’
Roms.rar 100%[===================>] 10.61M 482KB/s in 23s
2021-06-07 12:35:07 (465 KB/s) - ‘Roms.rar’ saved [11128004/11128004]
먼저 필요한 파일을 wget 명령어로 다운로드 받습니다.
!unrar x /content/Roms.rar
UNRAR 5.50 freeware Copyright (c) 1993-2017 Alexander Roshal
Extracting from /content/Roms.rar
Extracting HC ROMS.zip OK
Extracting ROMS.zip OK
All OK
다운받은 rar파일을 unrar를 활용하여 풀어줍니다.
!unzip /content/ROMS.zip
그럼 나온 파일중에 ROMS.zip을 unzip을 활용하여 압축을 풀어줍니다.
!pip install gym-retro
그 다음 pip 명령어를 통하여 gym-retro를 설치합니다.
!python3 -m retro.import ROMS/
그리고 위의 명령어를 한번 실행해줍니다.
그리고 gym의 render 명령어를 제대로 동작하게 하기 위해서 아래의 링크를 참고하여 필요한 설치 작업들을 진행합니다.
위의 링크를 참고하여 필요한 설치 작업 진행이 완료되었다면
import retro
import random
from pyvirtualdisplay import Display
import matplotlib.pyplot as plt
display = Display(visible=False, size=(400, 300))
display.start()
env = retro.make(game="SpaceInvaders-Atari2600")
height, width, channels = env.observation_space.shape
actions = env.action_space.n
episodes = 5
for episode in range(1, episodes):
state = env.reset()
done = False
score = 0
while not done:
env.render(mode='rgb_array')
action = random.choice([0, 1, 2, 3, 4, 5])
n_state, reward, done, info = env.step([action])
score += reward
print(f"Episode : {episode} Score : {score}")
env.close()
위처럼 코드를 작성하고 실행해보면!
Episode : 1 Score : 485.0
Episode : 2 Score : 775.0
Episode : 3 Score : 555.0
Episode : 4 Score : 485.0
제대로 동작하는 것을 볼 수 있습니다.
저는 위의 코드중에서
n_state, reward, done, info = env.step([action])
이 부분에서 삽질을 가장 오래했습니다.
n_state, reward, done, info = env.step(action)
맨 처음 action을 위처럼 작성하였다가
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-40-ddce2f4b87e4> in <module>()
8 env.render(mode='rgb_array')
9 action = random.choice([0, 1, 2, 3, 4, 5])
---> 10 n_state, reward, done, info = env.step(action)
11 score += reward
12 print(f"Episode : {episode} Score : {score}")
1 frames
/usr/local/lib/python3.7/dist-packages/retro/retro_env.py in action_to_array(self, a)
162 action |= buttons[ap[i]]
163 else:
--> 164 ap = a[self.num_buttons * p:self.num_buttons * (p + 1)]
165 for i in range(len(ap)):
166 action |= int(ap[i]) << i
TypeError: 'int' object is not subscriptable
이와 같은 TypeError : 'int' object is not subscriptable 오류가 계속 났는데
이는 action을 [action] 으로 변경 하고 나서 해결되었습니다.
그럼 ! 읽어주셔서 감사합니다.
즐거운 개발 하시기 바랍니다~
'머신러닝 | 딥러닝 > 강화학습' 카테고리의 다른 글
Google Colab에서 OpenAI gym render 사용하는 방법! (2) | 2021.05.15 |
---|
Comments