TensorFlow练习5: 训练一个简单的游戏AI(Deep Q Network)

Deep Q Network是DeepMind最早(2013年)提出来的,是深度强化学习方法。

最开始AI什么也不会,通过给它提供游戏界面像素和分数,慢慢把它训练成游戏高手。

Github上有不少DQN实现,在本帖中,我使用TensorFlow训练一个简单的游戏AI。

  1. 使用pygame写一个简单的小游戏
  2. 使用强化学习训练游戏AI

pygame小游戏

自制的垃圾游戏。

操作:按住鼠标左键左移棒子,按住鼠标右键右移棒子。每次接住小方块得一分。

TensorFlow练习5: 训练一个简单的游戏AI(Deep Q Network)
把棒子调短,提高游戏难度,看看训练出来的游戏AI有多强

ps. 其实我想做一个俄罗斯方块,呵呵呵呵,留着以后再做。

基于强化学习的AI(TensorFlow)

训练中:

TensorFlow练习5: 训练一个简单的游戏AI(Deep Q Network)

如果你使用Linux,你可以使用htop监控内存使用情况。

刚开始,AI傻傻的,只会控制棒子来回瞎晃,通过try-error,它会慢慢掌握这个游戏。等我一觉醒来,这货已经玩的不亦乐乎了。

ps.准备换一个顶级显卡,CPU玩tensorflow太费劲,看来非游戏玩家也有必要买好显卡。

使用训练出来AI玩游戏

这步要做的就是加载使用前面保存的模型。

上面是自己手动实现的强化学习算法,其实有一个特别好的专门为开发测试AI而设计的库openai gym。OpenAI Gym是一个为比较、构建强化学习Ai的一个Python库,它包含很多测试游戏。

参考:https://www.nervanasys.com/openai/

使用OpenAI Gym创建游戏AI
强化学习模型

安装Gym

相关文章

《TensorFlow练习5: 训练一个简单的游戏AI(Deep Q Network)》有28个想法

  1. 小白,刚学Python编程,代码是看不懂的,但是觉得代码段配色极简极漂亮,能透露下配色方案吗?我用的是Mac系统。谢谢

  2. action = tf.reduce_sum(tf.mul(predict_action, argmax), reduction_indices = 1) 请问这句的意义是什么啊,能不能解释一下啊,为什么要相乘呢? 我运行了这个例子,但是到了几个小时之后游戏画面就特别慢,感觉像是卡顿,还有卷积的结果readout是输出的每个动作的概率值还是直接就是动作?

  3. 终于全看明白了,但发现以下问题:1、LEARNING_RATE并不是学习率,准确地定义是马尔科夫过程的奖励的衰减因子;2、卷积神经网络的返回张量predict_action英文字面意思是“预测动作”,实际上其准确的定义应该是DQN里面的Q向量,(Q值=Q向量•action向量);3、cost函数的定义运用了马尔科夫过程里的贝尔曼公式(Qt-Rt-rQ(t+1)=0),R表示当前奖励奖励,r表示衰减因子Qt代表当前的价值,Q(t+1)代表下一状态的最大价值,cost函数就是计算贝尔曼公式的残差,整个网络的优化方向就是使Q满足贝尔曼公式。

  4. 既然是视频游戏,视频有一个特点是帧与帧之间的时间关联,采用随机抽样好像不太好吧?在卷积层下方使用循环神经网络,样本采取按时间连续抽样是不是更好?我是个弱弱的码农,最近两周才接触tf,所以一边看博主的代码一边查相关文档,很佩服博主知识的宽博,是我学习的对象!

  5. 这个算法是deep Q LEARN?去掉模型前面的卷积池化层,这个模型就是一个浅层网络,或者说就是一个卷积神经网络,没有看到deep Q learn。cost函数没怎么看明白,最好详细注释一下,我认为只有cost函数才是神经网络里面可以有依据数学理论来进行优化的,其他的如多少层,每层多少神经元,是否存在环…这些都是经验累积。

  6. 博主,为什么我运行的程序迭代700多次游戏模块就未响应了,运行1000次也没有收敛,在999次的时候回出现文件写入错误。我是在Windows下anaconda运行的。

    1. 把事件处理那部分注释掉的代码用上,就不会代700多次未响应。
      写入文件错误,改成这样就行:
      saver.save(sess, ‘./game.cpk’, global_step = n)

  7. 博主这一系列的帖子写得真好!!第151行随机选择action的概率应该是不断减小的, if(random.random() <= INITIAL_EPSILON) 应该改为 epsilon吧?

  8. 我在ubuntu试了下代码,跑了几分钟后cpu会突然从60%飙到100%,游戏界面变得很卡,移动得很慢,在虚拟机和硬盘安装的ubuntu上都会复现这个问题,这时内存占用并不多,请问博主知道大概是什么原因吗?

      1. 好的多谢,我尝试升级下配置。你的博客都蛮有意思的,我把古诗词那个也试着跑了一下,训练完之后,生成古诗词的时候报错,提示找不到生成的49那个数据集,但是我确实是训练完了,目录下有从7到49的数据,我再找找原因。

        1. 你使用的tf版本是多少,tf还在测试阶段,API变动比较大。使用latest_checkpoint()试试
          The save_path argument is typically a value previously returned from a save() call, or a call to latest_checkpoint().

          1. 我也遇到了同样的问题,改为restore方法后,并没有解决。感觉自己电脑配置还行,固态硬盘加8G内存,tf是0.12。您的tf多少,硬件环境呢?

          2. 你好,我也遇到50000后游戏变得很慢的问题。可是内存占用还只是50%,cpu也是50%。我用的tf 1.0 gpu版的。这是正常的?

  9. 77 print(“Score: “, self.score,end=’\r’)
    ^
    78 SyntaxError: invalid syntax 请问这个怎么解决,你做的游戏不能自己动啊

发表评论

电子邮件地址不会被公开。 必填项已用*标注