CarRacing DQN: 深度 Q 学习训练自驾车

OpenAI GYM CarRacing DQN: 深度 Q 学习训练自驾车

    • 引言
    • DQN 算法原理
      • Q 值和 Bellman 方程
      • DQN 结构
    • 训练过程设计
      • 经验回放(Experience Replay)
      • 目标网络(Target Network)
      • 训练循环
    • 训练结果和模型演变
      • 400 轮训练后
      • 500 轮训练后
      • 600 轮训练后
    • 总结

引言

在强化学习领域,训练一个能够自动驾驶的 CarRacing 2D 代理是一个引人入胜的挑战。在本博客中,我们将深入研究使用 TensorFlow 和 Keras 实现的深度 Q 学习(DQN)的代码,以训练一个能够在 CarRacing 的虚拟赛道上导航的模型。
在这里插入图片描述

DQN 算法原理

Q 值和 Bellman 方程

Q 值(状态-动作对的期望累积奖励)由 Bellman 方程定义:
[ Q(s,a) = r(s,a) + \gamma \max Q(s’, A) ]

  • (s) 是当前状态
  • (a) 是采取的动作
  • (r(s,a)) 是在状态 (s) 采取动作 (a) 后的奖励
  • (s’) 是下一个状态
  • (A) 是动作空间
  • (\gamma) 是折扣率,用于衡量未来奖励的重要性

DQN 结构

DQN 将 Q 学习与深度学习相结合,将 Q 表替换为神经网络。模型的结构如下:

model = Sequential()
model.add(Conv2D(filters=6, kernel_size=(7, 7), strides=3, activation='relu', input_shape=(96, 96, self.frame_stack_num)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(filters=12, kernel_size=(4, 4), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(216, activation='relu'))
model.add(Dense(len(self.action_space), activation=None))
model.compile(loss='mean_squared_error', optimizer=Adam(lr=self.learning_rate, epsilon=1e-7))
  • 输入是三个连续的顶视图图像,每个为 96x96 像素
  • 卷积层和最大池化层用于捕捉图像特征
  • 全连接层输出每个动作的 Q 值

训练过程设计

经验回放(Experience Replay)

为了打破数据间的时序相关性,采用经验回放,将先前的经验存储在经验池中,并从中随机抽样用于训练。

def memorize(self, state, action, reward, next_state, done):
    self.memory.append((state, self.action_space.index(action), reward, next_state, done))

目标网络(Target Network)

引入目标网络,减缓目标的变化,提高训练的稳定性。

def update_target_model(self):
    self.target_model.set_weights(self.model.get_weights())

训练循环

def replay(self, batch_size):
    minibatch = random.sample(self.memory, batch_size)
    train_state = []
    train_target = []
    for state, action_index, reward, next_state, done in minibatch:
        target = self.model.predict(np.expand_dims(state, axis=0))[0]
        if done:
            target[action_index] = reward
        else:
            t = self.target_model.predict(np.expand_dims(next_state, axis=0))[0]
            target[action_index] = reward + self.gamma * np.amax(t)
        train_state.append(state)
        train_target.append(target)
    self.model.fit(np.array(train_state), np.array(train_target), epochs=1, verbose=0)

在每次训练循环中,从经验池中随机选择批量数据,计算目标 Q 值,并更新模型权重。

训练结果和模型演变

通过训练,我们观察到模型逐渐学会在赛道上导航:

400 轮训练后

模型在学习中遇到急转弯时的困难,偶尔偏离赛道。

500 轮训练后

模型变得更加熟练,减少了错误,驾驶更加平稳。

600 轮训练后

模型在贪婪获取奖励时变得鲁莽,导致在急转弯时离开赛道。

总结

本博客深入剖析了使用 DQN 算法训练自驾车代理的过程。通过经验回放和目标网络的应用,模型逐渐学会优化 Q 值以实现更好的导航策略。深度 Q 学习为解决复杂环境中的决策问题提供了一种强大而灵活的方法,为自动驾驶领域的研究和应用提供了新的思路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/295235.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快递物流怎么寄最便宜?你一定要知道的5个方法 !

家人们,临近年关,大家的钱包是不是鼓鼓的了,难免的亲戚朋友之间会相互寄送一些东西,所以最近因为需要经常寄快递物流,小编所以特地整理了5个我们平时个人寄快递便宜的方法攻略,推荐第五个,实用干…

IP代理测试:关于Ping测试你需要知道的一切干货

您在访问互联网时是否遇到过持续滞后或花费很长时间等待网站加载的情况?为了避免这种情况,您可以测试 ping 以查看连接速度。如果您使用代理,此 ping 测试还会显示代理服务器的响应速度。 ping 测试是一个很有价值的工具,可以帮助…

WPF美化ItemsControl1:不同颜色间隔

首先我们有的是一个绑定好数据的ItemsControl <ItemsControl ItemsSource"{Binding Starts}"> </ItemsControl> 运行后呢是朴素的将数据竖着排列 如果想要数据之间有间距&#xff0c;可以使用数据模板&#xff0c;将数据放到TextBlock中显示&#xff0…

AWTK 开源串口屏开发(5) - MCU端 SDK 用法

AWTK 开源智能串口屏&#xff0c;不但开放了串口屏端全部源码&#xff0c;还提供了MCU 端 SDK&#xff0c;大大加快 MCU 软件的开发。本介绍一下 MCU 端 SDK 在不同平台上的用法。 完整示例可以参考下面的几个例子&#xff1a; 普通嵌入式系统 mcu/stm32/hmi_app/hmi_app.c 低…

23 导航栏

效果演示 实现了一个响应式的导航栏&#xff0c;当鼠标悬停在导航栏上的某个选项上时&#xff0c;对应的横条会从左到右地移动&#xff0c;从而实现了导航栏的动态效果。 Code <div class"flex"><ul><li>1</li><li>2</li><l…

04 supervised learning

Summary: unspervised learning clustering&#xff08;聚类算法&#xff09;Anomaly detection&#xff08;异常检测&#xff09; Recommender Systems&#xff08;推荐系统&#xff09;Reinforcement Learning&#xff08;强化学习&#xff09; 一 、 K-means算法 1.Notio…

Visual studio 2010的安装与使用

一、下载及安装 1、下载软件。 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/115RibV7dOI_y8LUGW-94cA?pwd4hrs 提取码&#xff1a;4hrs 2、右键解压下载好的文件。 3、找到cn_visual_2010_……/Setup.hta&#xff0c;双击运行。 4、选择第三个“ Visual…

Spring学习之——AOP(面向切面)

AOP 概念 AOP&#xff1a;全称是Aspect Oriented Programming即&#xff1a;面向切面编程。 简单的说它就是把我们程序重复的代码抽取出来&#xff0c;在需要执行的时候&#xff0c;使用动态代理的技术&#xff0c;在不修改源码的基础上&#xff0c;对程序进行增强&#xff…

Mac上安装 Node.js 的版本管理工具 n,以及 n 使用,的使用

安装 最近刚更换 Mac 本进行项目的开发&#xff0c;刚上手 Mac 本还不是很熟练&#xff0c;需要安装 Node.js 的包管理工具 在 Windows 上我是实用的 nvm 来管理的 Node 版本&#xff0c;但是我尝试下载 Nvm &#xff0c;发现下载安装后的 Nvm 无法使用&#xff0c;提示 “Th…

基于web3.js和ganache实现智能合约调用

目的&#xff1a;智能合约发布到本地以太坊模拟软件ganache并完成交互 准备工作&#xff1a; web3.jsganache模拟软件 ganache参数配置 从ganache获取一个url&#xff0c;和一个账号的地址&#xff0c; url直接使用图中的rpc server位置的数据即可 账号address从下列0x开头…

解决报错Exception encountered during context initialization

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读报错解决 报错 今天在测试一个类时&#xff0c;突然间报了以下错误。 juni…

【电路笔记】-电感器

电感器 文章目录 电感器1、概述2、电感器的时间常数3、电感器示例1 电感器是一种由线圈组成的无源电气元件&#xff0c;其设计目的是利用电流通过线圈而产生的磁力和电力之间的关系。 1、概述 在本中&#xff0c;我们将看到电感器是一种电子元件&#xff0c;用于将电感引入到电…

qiankun 公共依赖

1、提取公共依赖的目的 减少相同资源的重复加载资源版本不同步打包文件庞大2、如何提取公共依赖 基本思路&#xff1a;1、相同依赖 采用 CDN 的方式加载&#xff0c;并把 所有依赖的 CDN 链接 统一放到一个文件中进行管理 2、把存放 CDN 链接的文件&#xff0c;引入到 vue.conf…

【mysql】报错1349 - View‘s SELECT contains a subquery in the FROM clause

操作 创建视图的sql语句中有不支持子查询 mysql创建视图 select * from (select name,age from table_name where 11 and namea ) tb where 11 and type1问题 报错1349 - View’s SELECT contains a subquery in the FROM clause 原因 原因创建视图的sql语句中有不支持子查…

2024最新阿里云服务器地域(城市)对照表

2024年阿里云服务器地域分布表&#xff0c;地域指数据中心所在的地理区域&#xff0c;通常按照数据中心所在的城市划分&#xff0c;例如华北2&#xff08;北京&#xff09;地域表示数据中心所在的城市是北京。阿里云地域分为四部分即中国、亚太其他国家、欧洲与美洲和中东&…

在mybatis中编写SQL时,提示表名和字段名的设置方法

一、在设置中搜索SQL Dialects 二、将Global SQL Dialect和Project SQL Dialect设置为MySQL 三、添加Path&#xff0c;选择当前项目&#xff0c;完成后应用 四、连接要使用的数据库&#xff0c;连接到具体要使用的数据库 五、连接完成后&#xff0c;在xml中编写sql语句就会有…

鸡目标检测数据集VOC格式500张

鸡&#xff0c;一种家禽&#xff0c;是人类的重要食物来源之一&#xff0c;也是农业生产中的重要组成部分。 鸡的外观相对较为简单&#xff0c;身体呈圆锥形&#xff0c;羽毛密集&#xff0c;双翅短小&#xff0c;无法飞行。鸡的头部较小&#xff0c;嘴巴尖锐&#xff0c;方便…

DZ-200系列中间继电器 板后不带底座 DZY-212X DC220V JOSEF约瑟

DZY-200系列中间继电器 系列型号&#xff1a; DZY-201中间继电器 DZY-222中间继电器 DZY-202中间继电器 DZY-203中间继电器 DZY-204中间继电器 DZY-205中间继电器 DZY-206中间继电器 DZY-207中间继电器 DZY-208中间继电器 DZY-209中间继电器 DZY-210中间继电器 DZY-211中间继电…

全视通-医院智能视讯系统 病房视讯系统解决方案 智能医院对讲系统信息发布系统

医院智能视讯系统解决方案 1、行业背景 对于患者来说现阶段各大医院的住院部大都面临同样的问题&#xff0c;例如患者就医缺乏精准化医疗&#xff0c;缺乏对患者的心理健康引导&#xff0c;缺乏多维度沟通渠道&#xff0c;缺乏多元增值服务等。 对于传统医院住院部病房&am…

zookeeper应用场景之分布式的ID生成器

1. 分布式ID生成器的使用场景 在分布式系统中&#xff0c;分布式ID生成器的使用场景非常之多&#xff1a; 大量的数据记录&#xff0c;需要分布式ID。大量的系统消息&#xff0c;需要分布式ID。大量的请求日志&#xff0c;如restful的操作记录&#xff0c;需要唯一标识&#x…