Open geektutu opened 5 years ago
大佬可敬 希望大佬以后的博客不会被无良爬走...
@Cingho 感谢你的支持~
写的真是细致
感谢你的讲解,我想问一下,这个实例中创建了两个网络,model和target_model,那这个属于DDQN,还是单个的DQN?
@xiangyangfeng 属于DDQN,如果是DQN的话,仅是将Q-Learning的Q表转为神经网络来拟合映射,不会有2个模型。这个示例,仅用DQN一直没办法拟合。
@geektutu @xiangyangfeng 属于DDQN,如果是DQN的话,仅是将Q-Learning的Q表转为神经网络来拟合映射,不会有2个模型。这个示例,仅用DQN一直没办法拟合。
那是不是说,DQN中还是要建立一个Q表,并依据Q-learning进行更新,然后以Q表中的预测值来作为标签训练神经网络,逐步把Q表拟合成函数?
@xiangyangfeng 直接使用神经网络代替Q表,没有Q表了。
楼主,你的这个代码用了多大的内存啊,我的16G居然不够
@hu-1996-zhe 楼主,你的这个代码用了多大的内存啊,我的16G居然不够
你好,你的问题解决了吗?
我的也是内存不够,我运行莫烦老师的tensorflow1.0版本的DQN就可以
我又租了一个服务器2080ti,跑2个小时可以跑通。
@halbupt 我又租了一个服务器2080ti,跑2个小时可以跑通。
这个网络不大,怎么会占这么多内存。。哪位大佬解读一下
一直没整明白,为什么会内存不够使用(16G),运行过成功内存直线上升,然后就中断了!
内存不断上升的主要原因应该是tensorflow2.0中kears底层实现有问题,在循环中没有将训练用的计算节点及时清理导致内存占用越来越大,更新到tensorflow2.1后这个问题就被解决了
Double DQN的意思是指采用两个模型吗,根据我的理解DDQN和DQN的应该都有两个模型,区别的地方应该在Q值的更新方法上。
根据各位大佬的回答,将tensorflow升级到了2.1版本,解决了内存问题,但是发现执行效率竟然跟1.0版本使用静态图差了50倍左右,有大佬知道怎么回事吗
Q[i][a] = (1 - lr) * Q[i][a] + lr * (reward + factor * np.amax(Q_next[i]))
这应该时DQN的更新Q_TARGET的方法,而不是DDQN。文中写了DDQN有点歧义,希望可以把两种算法更新Q_target的方法都写一下。
@wendyzhang1114
Q[i][a] = (1 - lr) * Q[i][a] + lr * (reward + factor * np.amax(Q_next[i]))
这应该时DQN的更新Q_TARGET的方法,而不是DDQN。文中写了DDQN有点歧义,希望可以把两种算法更新Q_target的方法都写一下。
确实不是DDQN,只是DQN。
@WeiqingAi
@wendyzhang1114
Q[i][a] = (1 - lr) * Q[i][a] + lr * (reward + factor * np.amax(Q_next[i]))
这应该时DQN的更新Q_TARGET的方法,而不是DDQN。文中写了DDQN有点歧义,希望可以把两种算法更新Q_target的方法都写一下。确实不是DDQN,只是DQN。
这也不是DQN,DQN应该Q = self.target_model.predict(s_batch),而文章中Q不是target,而是评估模型
DQN应该Q = self.target_model.predict(s_batch),而文章中Q不是target,而是评估模型.补充下DDQN,但我用文章中方式、原始DQN方式、DDQN方式测试打砖块,参数都一样,效果居然是文章中更新Q表方式最好,目前还不清楚原因。
补充DQN:
###这里区别:DQN应该更新是目标Q,用目标Q训练评估
Q = self.target_model.predict(s_batch)
Q_next = self.target_model.predict(next_s_batch)
# 使用公式更新训练集中的Q值
for i, replay in enumerate(replay_batch):
_, a, _, reward = replay
Q[i][a] = (1 - lr) * Q[i][a] + lr * (reward + factor * np.amax(Q_next[i]))
# 传入网络进行训练
self.model.fit(s_batch, Q, verbose=0)
补充DDQN:
Q = self.target_model.predict(s_batch)
Q_next = self.target_model.predict(next_s_batch)
Q_modle_next = self.model.predict(next_s_batch)
# 使用公式更新训练集中的Q值
for i, replay in enumerate(replay_batch):
_, a, _, reward = replay
###区别在这里
j = np.argmax(Q_modle_next[i])
Q[i][a] = (1 - lr) * Q[i][a] + lr * (reward + factor * Q_next[i][j])
迭代157次还没收敛,话说,我CPU占用高,GPU就一点,训练157次,接近1.2H
https://geektutu.com/post/tensorflow2-gym-dqn.html
TensorFlow 2.0 入门系列文章,第八篇,强化学习 DQN (Deep Q-Learning) 玩转 OpenAI gym game MountainCar-v0。