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

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

ただいまの
回答率

90.33%

強化学習の報酬の再現

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 55

komo135

score 4

前提・実現したいこと

tensorflowにおいて保存したチェックポイントに基づいてトレーニングを再開または評価したいのですが、何度実行しても、一回目の報酬は似通った値になります。

発生している問題

イメージ説明
イメージ説明
イメージ説明

該当のソースコード

        if restore==False:
            self.actor = Actor('actor-original', self.state_size, self.OUTPUT_SIZE,noise,norm)
            self.actor_target = Actor('actor-target', self.state_size, self.OUTPUT_SIZE,noise,norm)
            self.critic = Critic('critic-original', self.state_size, self.OUTPUT_SIZE, self.LEARNING_RATE,noise,norm)
            self.critic_target = Critic('critic-target', self.state_size, self.OUTPUT_SIZE, self.LEARNING_RATE,noise,norm)
            self.actions = tf.placeholder(tf.float32, (None,self.OUTPUT_SIZE),name="actions")
            self.log_pi = tf.placeholder(tf.float32, (None,),name="log_pi")
            self.entropy = tf.placeholder(tf.float32, (None,),name="entropy")
        else:
            saver = tf.train.import_meta_graph(tf.train.latest_checkpoint('./') + ".meta")
            saver.restore(self.sess, tf.train.latest_checkpoint('./'))
            self.actor = Actor_Restore("actor-original")
            self.actor_target = Actor_Restore("actor-target")
            self.critic = Critic_Restore("critic-original",self.LEARNING_RATE)
            self.critic_target = Critic_Restore("critic-target",self.LEARNING_RATE)
            self.actions = tf.get_default_graph().get_tensor_by_name("actions:0")
            self.log_pi = tf.get_default_graph().get_tensor_by_name("log_pi:0")
            self.entropy = tf.get_default_graph().get_tensor_by_name("entropy:0")

変数の初期化は初期化されていない変数だけ行っています。

アクション選択コード

def exploration(prediction,output_size):
  prediction = prediction.astype("float64")

  if np.random.rand() < 0.3:
    tau=2.0
    clip=(-250.0, 250.0)
    exp_values = np.exp(np.clip(prediction / tau, clip[0], clip[1]))
    probs = exp_values / np.sum(exp_values)
    action = np.random.choice(range(output_size), p=probs)
  else:
    action = np.argmax(prediction)

  return action

trainingコード

    def train(self, iterations, checkpoint, spread, pip_cost, n=4):
        copy = 0
        for i in range(iterations):
            position = 3
            total_pip = 0.00
            max_pip = 0
            pip = []
            spread = spread / pip_cost
            done = False
            states = []
            p = []
            h_s = []
            h_r = []
            h_i = []
            self.init_value = np.zeros((1, 512))
            tau = 0
            old_reword = 0.0
            self.history = []
            self.MEMORIES = deque()
            self.pip = []
            if (copy + 1) % 4 == 0: 
              self._assign('actor-original', 'actor-target')
              self._assign('critic-original', 'critic-target')

            for t in  range(0, len(self.trend)-1, self.skip):
                state = self.get_state(t)
                h_s.append(state)
                action = self._select_action(state)
                self.history.append(action)
                h_i.append(self.init_value[0])
                next_state = self.get_state(t + 1)
                # print(t)
                states,pip,position = self.reward(self.trend,t,pip,action,position,states,pip_cost,spread)

                if len(pip) != 0:
                  self.pip = np.asanyarray(pip)
                  total_pip = np.sum(self.pip)
                mean_pip = total_pip / (t + 1)
                reward = mean_pip - old_reword
                old_reword = mean_pip
                h_r.append(reward)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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