莫烦老师,DQN代码学习笔记(图片版)

详情请见莫烦老师DQN主页:DQN 算法更新 (Tensorflow) - 强化学习 Reinforcement Learning | 莫烦Python

莫烦老师代码(没有我繁琐注释代码直通车):MorvanZhou/Reinforcement-learning-with-tensorflow

上一篇博客有代码版,可粘贴

参考文献:Playing Atari with Deep Reinforcement Learning

https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf

 

第一次在网上写文章,不知怎么注明参考出处,如涉及侵权问题请评论告诉我。

本人初入强化学习,看莫烦老师的课受益匪浅,再次由衷的感谢老师的无私奉献,笔芯❤~

由于本人不懂的地方太多,所以注释的比较多,当然也加入了老师的注释。供以后学习参考,和其他小白一起进步。

建议参考DQN算法的英文流程,我也不知道这种中文注释能在哪里更方便的上传,就在这里发好啦,这里排版没准乱如果真要参考,就拷到编辑器上吧

由于知乎好像关键字搜不到,我又搞了个博客


run_this.py代码

#更新的步骤
from maze_env import Maze
from RL_brain import DeepQNetwork#引入了自己写的maze_env,RL_brain模块中class maze,class DeepQNetwork
def run_maze():
    step = 0#为了记录当前走的第几步,因为先要存储一些记忆,当记忆库中有一些东西的时候才去学习
    for episode in range(300):
        # initial observation
        observation = env.reset()#环境给出初始坐标

        while True:
            # fresh env更新环境
            env.render()

            # RL choose action based on observation根据观测值选择一个动作,根据RL.choose_action,但这个函数只调用了q_eval,即只进行正向传播得到q值进行选择
            action = RL.choose_action(observation)

            # RL take action and get next observation and reward选择动作后得到观测值,奖励,是否终结done的信息
            observation_, reward, done = env.step(action)

            RL.store_transition(observation, action, reward, observation_)##重要:存储记忆:现在这步观测值,采取的动作。会得到的奖励,采取行动后下一步观测值

			# 控制学习起始时间和频率 (先累积一些记忆再开始学习)
            if (step > 200) and (step % 5 == 0):#当步数大于两百的时候才开始学习,每五步学习一次,200步之前跳过learn,并且选择
                RL.learn()#其中会有反向训练第一个q_predict网络

            # swap observation
            observation = observation_#更新观测值

            # break while loop when end of this episode
            if done:
                break
            step += 1

    # end of game
    print('game over')
    env.destroy()


if __name__ == "__main__":
    # maze game
    env = Maze()#引入环境
    RL = DeepQNetwork(env.n_actions, env.n_features,
                      learning_rate=0.01,
                      reward_decay=0.9,
                      e_greedy=0.9,
                      replace_target_iter=200, # 每 200 步替换一次 target_net 的参数
                      memory_size=2000,# 记忆上限
                      output_graph=False # 是否输出 tensorboard 文件
                      )
    env.after(100, run_maze)
    env.mainloop()
    RL.plot_cost() # 观看神经网络的误差曲线

RL_brain.py代码

import numpy as np
import tensorflow as tf

np.random.seed(1)
tf.set_random_seed(1)


# Deep Q Network off-policy
class DeepQNetwork:
    def __init__(
            self,
            n_actions,#输出多少个action的值
            n_features,#接受多少个观测值的相关特征
            learning_rate=0.01,#NN中learning_rate学习速率
            reward_decay=0.9,#Q-learning中reward衰减因子
            e_greedy=0.9,
            replace_target_iter=300,#更新Q现实网络参数的步骤数
            memory_size=500,#存储记忆的数量
            batch_size=32,#每次从记忆库中取的样本数量
            e_greedy_increment=None,
            output_graph=False,
    ):
        self.n_actions = n_actions#由maze得4
        self.n_features = n_features#由maze得2
        self.lr = learning_rate
        self.gamma = reward_decay
        self.epsilon_max = e_greedy#
        self.replace_target_iter = replace_target_iter#隔多少步后将target net 的参数更新为最新的参数
        self.memory_size = memory_size#整个记忆库的容量,即RL.store_transition(observation, action, reward, observation_)有多少条
        self.batch_size = batch_size#随机梯度下降SGD会用到
        self.epsilon_increment = e_greedy_increment#表示不断扩大epsilon,以便有更大的概率拿到好的值
        self.epsilon = 0 if e_greedy_increment is not None else self.epsilon_max#如果e_greedy_increment没有值,则self.epsilon设置为self.epsilon_max=0.9

        # total learning step
        s
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值