深度强化学习Deep Q-Network(DQN)玩CartPole游戏源码运行笔记

1. 运行环境介绍

  • NVIDIA GTX 1070
  • Ubuntu 16.04 x64
  • CUDA 8.0.61
  • cuDNN 5.1
  • Python 3.4
  • TensorFlow 1.2.0
  • Keras 2.2.4(Keras-2.2.4-py2.py3-none-any.whl)
  • OpenCV 3.1.0 for Python3.4(opencv-3.1.0-np111py34_1.tar.bz2)
  • gym(gym-0.12.0.tar.gz)

2. 准备

S1. 下载源码并解压,地址:https://github.com/keon/deep-q-learning

S2. 若希望从头开始体验training过程,可以删除源码中save文件夹中的所有weights文件(或者修改成别的文件名也可以)。


3. 运行

S1. 打开源码中的ddqn.py文件,取消第102行、第116行和第117行的注释

S2. 新建终端,cd到源码的根目录下,运行如下命令即可:

python ddqn.py

运行过程如下两幅动图所示:
深度强化学习Deep Q-Network(DQN)玩CartPole游戏源码运行笔记_第1张图片
深度强化学习Deep Q-Network(DQN)玩CartPole游戏源码运行笔记_第2张图片

可以发现,迭代次数越多,agent玩游戏的能力越强。


4. 可能出现的问题及解决方法

问题: 源码的ddqn.py文件第68行进行random的sample函数调用报错:TypeError: Population must be a sequence or set. For dicts, use list(d).,具体如下所示:

Traceback (most recent call last):
  File "ddqn.py", line 115, in <module>
    agent.replay(batch_size)
  File "ddqn.py", line 68, in replay
    minibatch = random.sample(self.memory, batch_size)
  File "/home/dodge/anaconda3/envs/py34_for_tf120/lib/python3.4/random.py", line 311, in sample
    raise TypeError("Population must be a sequence or set.  For dicts, use list(d).")
TypeError: Population must be a sequence or set.  For dicts, use list(d).

解决: 定位到第68行代码,将其修改为如下即可解决此问题:

minibatch = random.sample(list(self.memory), batch_size)

你可能感兴趣的:(深度学习(Deep,learning),Python,learning),Keras)