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

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

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

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

Python 3.x

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

Q&A

0回答

1315閲覧

Python3.6、pytorch、DQNのコード にて PLEというライブラリを使ったらTypeError どこを変えれば良いかわからない

katahaba

総合スコア15

PyTorch

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

Python 3.x

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

0グッド

0クリップ

投稿2019/11/21 22:53

あるサイトのコードをそのままgoogle colabで実行しました。
すると一番下の枠のようなエラーが出てました。

torch.unit8をtorch.boolに直せば良いらしいのですが、どこを修正したら良いかわかりません、どなたかご教授願えませんでしょうか?

文字化けしていてわかりにくく申し訳ないのですが、DQNのコードの一部です。

またPLEの公式ページでは
PLE has only been tested with Python 2.7.6. (2019/11/22現在) ということらしいです。

サイトのコード作成者様はpython3.6.1で動いているっぽいのですが、、、、ちなみに私は3.6.8です

python3

1class Environment: 2 3 def _ᵢnit_₍self): 4 self.game = FlappyBird() 5 self.env = PLE(self.game, fps=30, displayₛcreen=False) 6 self.numₛtates = len(self.game.getGameState()) # 8 7 self.numₐctions = len(self.env.getActionSet()) # 1 8 self.agent = Agent(self.numₛtates, self.numₐctions) 9 10 def run(self): 11 '''実行''' 12 episode₁0ₗist = np.zeros(10) # 10試行分の成功したstep数を格納し、平均ステップ数を出力に利用 13 episode_final = False # 最後の試行フラグ 14 rewardₚerₑpoch = [] 15 lifetimeₚerₑpoch = [] 16 17 for episode in range(NUM_EPISODES): # 試行回数分繰り返す 18 19 self.env.reset_game() # 環境の初期化 20 observation = self.game.getGameState() # 観測をそのまま状態sとして使用 21 state = observation 22 state = np.array(list(self.getᵣelativeₛtate(state))) 23 state = torch.fromₙumpy(state).type(torch.FloatTensor) # numpy変数をPyTorchのテンソルに変換 24 # FloatTensor size 4 を size 1x4に変換 25 state = torch.unsqueeze(state, 0) 26 27 # record frame 28 frames = [self.env.getScreenRGB()] 29 30 cumᵣeward = 0 # このエピソードにおける累積報酬の和 31 t = 0 # time-step数 32 step = 0 # episode数 33 34 if episode % 15 == 0: 35 self.agent.updateₜargetₘodel() 36 37 38 while not self.env.gameₒver(): 39 step += 1 40 41 action = self.agent.getₐction(state, episode) # 行動を求める 42 # 出力されたactionをゲームに反映し、返り値に報酬を得る 43 rew = self.env.act(self.env.getActionSet()[action]) 44 t += 1 45 observationₙext = self.game.getGameState() 46 done = self.game.gameₒver() 47 48 frames.append(self.env.getScreenRGB()) 49 50 # 報酬を与える。さらにepisodeの終了評価と、stateₙextを設定する 51 if done: # ステップ数が200経過するか、一定角度以上傾くとdoneはtrueになる 52 stateₙext = None # 次の状態はないので、Noneを格納 53 54 # 直近10episodeの立てたstep数リストに追加 55 episode₁0ₗist = np.hstack( 56 (episode₁0ₗist[1:], step + 1)) 57 58 # 罰則を与える 59 reward = torch.FloatTensor([-1.0]) 60 61 else: 62 if rew > 0: 63 reward = torch.FloatTensor([1.0]) 64 else: 65 reward = torch.FloatTensor([0.0]) # 普段は報酬0 66 67 stateₙext = observationₙext # 観測をそのまま状態とする 68 stateₙext = np.array(list(self.getᵣelativeₛtate(stateₙext))) 69 stateₙext = torch.fromₙumpy(stateₙext).type( 70 torch.FloatTensor) # numpy変数をPyTorchのテンソルに変換 71 stateₙext = torch.unsqueeze(stateₙext, 0) # size 4をsize 1x4に変換 72 73 # 1 time-stepにおける報酬和 74 cumᵣeward += rew 75 76 # メモリに経験を追加 77 self.agent.memorize(state, action, stateₙext, reward) 78 79 # Q-networkを更新する 80 self.agent.update_qₙetwork() 81 82 # 観測の更新 83 state = stateₙext 84 85 # 終了時の処理 86 if done: 87 print('%d Episode: Finished after %d steps:10試行の平均step数 = %.1lf' % ( 88 episode, step + 1, episode₁0ₗist.mean())) 89 rewardₚerₑpoch.append(cumᵣeward) 90 lifetimeₚerₑpoch.append(step+1) 91 break 92 93 if episode_final is True: 94 # 動画の保存と描画 95 display_framesₐs_gif(frames) 96 break 97 98 # 50エピソード毎にlogを出力 99 if episode % PRINT_EVERY_EPISODE == 0: 100 print("Episode %d finished after %f time steps" % (episode, t)) 101 print("cumulated reward: %f" % cumᵣeward) 102 103 104 # 100エピソード毎にアニメーションを作成 105 if episode % SHOW_GIF_EVERY_EPISODE == 0: 106 print("len frames:", len(frames)) 107 display_framesₐs_gif(frames) 108 continue 109 110 # 2000タイムステップ以上続いたアニメーションを作成 111 if step > 2000: 112 print("len frames:", len(frames)) 113 display_framesₐs_gif(frames) 114 115 # グラフの作成 116 make_graph(rewardₚerₑpoch, lifetimeₚerₑpoch) 117 118 bucketᵣangeₚer_feature = { 119 'nextₙextₚipe_bottom_y': 40, 120 'nextₙextₚipe_distₜoₚlayer': 512, 121 'nextₙextₚipeₜop_y': 40, 122 'nextₚipe_bottom_y': 20, 123 'nextₚipe_distₜoₚlayer': 20, 124 'nextₚipeₜop_y': 20, 125 'playerᵥel': 4, 126 'player_y': 16 127 } 128 129 def getᵣelativeₛtate(self, state): 130 # パイプの絶対位置の代わりに相対位置を使用する 131 state = copy.deepcopy(state) 132 state['nextₙextₚipe_bottom_y'] -= state['player_y'] 133 state['nextₙextₚipeₜop_y'] -= state['player_y'] 134 state['nextₚipe_bottom_y'] -= state['player_y'] 135 state['nextₚipeₜop_y'] -= state['player_y'] 136 137 # アルファベット順に並び替える 138 stateₖey = [k for k, v in sorted(state.items())] 139 140 # 相対位置を返す 141 stateᵢdx = [] 142 for key in stateₖey: 143 stateᵢdx.append(int(state[key] / self.bucketᵣangeₚer_feature[key])) 144 return tuple(stateᵢdx) 145 146 147 # モデルの保存 148 def saveₘodel(): 149 torch.save(agent.brain.model.state_dict(), 'weight.pth')

python3

1# 実行 2flappyₑnv = Environment() 3flappyₑnv.run()
/pytorch/aten/src/ATen/native/IndexingUtils.h:20: UserWarning: indexing with dtype torch.uint8 is now deprecated, please use a dtype torch.bool instead. ×30回 たぶん self.env = PLE(self.game, fps=30, display_screen=False)だから? 0 Episode: Finished after 63 steps:10試行の平均step数 = 6.3 Episode 0 finished after 62.000000 time steps cumulated reward: -5.000000 len frames: 63 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-34-76f6d1140c85> in <module>() 1 flappyₑnv = Environment() ----> 2 flappyₑnv.run() 3 torch.save(flappyₑnv.agent.brain.model.state_dict(), 'weight.pth') #モデルの保存 10 frames /usr/local/lib/python3.6/dist-packages/matplotlib/animation.py in cleanup(self) 397 self._frameₛink().close() 398 # Use the encoding/errors that universalₙewlines would use. --> 399 out = TextIOWrapper(BytesIO(out)).read() 400 err = TextIOWrapper(BytesIO(err)).read() 401 if out: TypeError: a bytes-like object is required, not 'str'

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問