あるサイトのコードをそのまま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'
あなたの回答
tips
プレビュー