没有合适的资源?快使用搜索试试~ 我知道了~
首页详细分析莫烦DQN代码
详细分析莫烦DQN代码 Python入门,莫烦是很好的选择,快去b站搜视频吧! 作为一只渣渣白,去看了莫烦的强化学习入门, 现在来回忆总结下DQN,作为笔记记录下来。 主要是对代码做了详细注释 DQN有两个网络,一个eval网络,一个target网络,两个网络结构相同,只是target网络的参数在一段时间后会被eval网络更新。 maze_env.py是环境文件,建立的是一个陷阱游戏的环境,就不用细分析了。 RL_brain.py是建立网络结构的文件: 在类DeepQNetwork中,有五个函数: n_actions 是动作空间数,环境中上下左右所以是4,n_features是状态特征数,根据
资源详情
资源评论
资源推荐
详细分析莫烦详细分析莫烦DQN代码代码
详细分析莫烦详细分析莫烦DQN代码代码
Python入门,莫烦是很好的选择,快去b站搜视频吧!
作为一只渣渣白,去看了莫烦的强化学习入门, 现在来回忆总结下DQN,作为笔记记录下来。
主要是对代码做了详细注释主要是对代码做了详细注释
DQN有两个网络,一个eval网络,一个target网络,两个网络结构相同,只是target网络的参数在一段时间后会被eval网络更
新。
maze_env.py是环境文件,建立的是一个陷阱游戏的环境,就不用细分析了。
RL_brain.py是建立网络结构的文件:
在类DeepQNetwork中,有五个函数:
n_actions 是动作空间数,环境中上下左右所以是4,n_features是状态特征数,根据位置坐标所以是2.
函数函数_build_net(self):(讲道理这个注释是详细到不能再详细了)
建立eval网络:
# ------------------ build evaluate_net ------------------
# input 用来接收observation
self.s = tf.placeholder(tf.float32, [None, self.n_features], name='s')
# for calculating loss 用来接收q_target的值
self.q_target = tf.placeholder(tf.float32, [None, self.n_actions], name='Q_target')
# 两层网络l1,l2,神经元 10个,第二层有多少动作输出多少
# variable_scope()用于定义创建变量(层)的操作的上下文管理器
with tf.variable_scope('eval_net'):
# c_names(collections_names) are the collections to store variables 在更新target_net参数时会用到
# \表示没有[],()的换行
c_names, n_l1, w_initializer, b_initializer = \
['eval_net_params', tf.GraphKeys.GLOBAL_VARIABLES], 10, \
tf.random_normal_initializer(0., 0.3), tf.constant_initializer(0.1)
# config of layers nl1第一层有多少个神经元
# eval_net 的第一层. collections 是在更新 target_net 参数时会用到
with tf.variable_scope('l1'):
w1 = tf.get_variable('w1', [self.n_features, n_l1], initializer=w_initializer, collections=c_names)
b1 = tf.get_variable('b1', [1, n_l1], initializer=b_initializer, collections=c_names)
l1 = tf.nn.relu(tf.matmul(self.s, w1) + b1)
print(l1)
# eval_net 的第二层. collections 是在更新 target_net 参数时会用到
with tf.variable_scope('l2'):
w2 = tf.get_variable('w2', [n_l1, self.n_actions], initializer=w_initializer, collections=c_names)
b2 = tf.get_variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names)
self.q_eval = tf.matmul(l1, w2) + b2
#作为行为的Q值 估计
with tf.variable_scope('loss'): #求误差
self.loss = tf.reduce_mean(tf.squared_difference(self.q_target, self.q_eval))
with tf.variable_scope('train'): #梯度下降
self._train_op = tf.train.RMSPropOptimizer(self.lr).minimize(self.loss)
两层全连接,隐藏层神经元个数都是10个,最后输出是q_eval,再求误差。
target网络建立和上面的大致相同,结构也相同。输出是q_next。
函数:函数:store_transition()(): 存储记忆
def store_transition(self, s, a, r, s_):
# hasattr() 函数用于判断对象是否包含对应的属性 如果对象有该属性返回 True,否则返回 False
if not hasattr(self, 'memory_counter'):
self.memory_counter = 0
# 记录一条 [s, a, r, s_] 记录
transition = np.hstack((s, [a, r], s_))
# numpy.hstack(tup)参数tup可以是元组,列表,或者numpy数组,返回结果为按顺序堆叠numpy的数组(按列堆叠一个)。
# 总 memory 大小是固定的, 如果超出总大小, 旧 memory 就被新 memory 替换
index = self.memory_counter % self.memory_size
self.memory[index, :] = transition
self.memory_counter += 1
存储transition,按照记忆池大小,按行插入,超过的则覆盖存储。
函数函数choose_action()():选择动作
weixin_38696590
- 粉丝: 6
- 资源: 927
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0