Python-DQN代码阅读(11)

1.代码

1.1代码阅读

python">tf.compat.v1.reset_default_graph()  # 重置 TensorFlow 的默认计算图

# Q 和 target 网络
q_net = QNetwork(scope="q", VALID_ACTIONS=VALID_ACTIONS)  # 创建 Q 网络
target_net = QNetwork(scope="target_q", VALID_ACTIONS=VALID_ACTIONS)  # 创建 target 网络

# 状态处理器
state_processor = ImageProcess()  # 创建状态处理器,用于处理状态数据

# TensorFlow 模型保存器
saver = tf.train.Saver()  # 创建用于保存和恢复 TensorFlow 模型的 saver 对象

1.2代码分解

1.2.1 scope="q",scope="target_q"

scope 参数在这里用于指定 TensorFlow 变量的命名空间,它在创建 Q 网络和 target 网络时被用于定义变量的名称前缀,从而确保不同网络中的变量具有唯一的名称。

例如,scope="q" 指定了 Q 网络的变量名称前缀为 "q",而 scope="target_q" 则指定了 target 网络的变量名称前缀为 "target_q"。这样,当两个网络共享一些变量时,可以通过不同的名称前缀来区分它们,避免命名冲突。

1.2.2 q_net = QNetwork(scope="q", VALID_ACTIONS=VALID_ACTIONS)

python">q_net = QNetwork(scope="q", VALID_ACTIONS=VALID_ACTIONS)

这行代码创建了一个 QNetwork 类的实例对象 q_net,并传入了两个参数:

  1. scope="q":这是一个字符串参数,用于为 TensorFlow 变量指定命名空间。在 QNetwork 类的内部,所有的 TensorFlow 变量都会根据这个命名空间前缀进行命名,确保变量名称的唯一性。

  2. VALID_ACTIONS=VALID_ACTIONS:这是一个用于指定有效动作的参数。VALID_ACTIONS 是一个包含所有有效动作的列表或数组,用于定义 Q 网络的输出层的大小。在 QNetwork 类的内部,输出层的大小将根据这个参数来设置,以匹配环境中的有效动作的数量。

通过传入这些参数,q_net 对象就被初始化为一个具有特定命名空间和输出层大小的 Q 网络。在后续的代码中,可以通过 q_net 对象调用 Q 网络的方法,如 q_net.predict()q_net.update(),来进行网络的预测和更新操作。

1.2.3 target_net = QNetwork(scope="target_q", VALID_ACTIONS=VALID_ACTIONS)

python">target_net = QNetwork(scope="target_q", VALID_ACTIONS=VALID_ACTIONS)

这行代码创建了一个 QNetwork 类的实例对象 target_net,并传入了两个参数:

  1. scope="target_q":这是一个字符串参数,用于为 TensorFlow 变量指定命名空间。在 QNetwork 类的内部,所有的 TensorFlow 变量都会根据这个命名空间前缀进行命名,确保变量名称的唯一性。这里的命名空间为 "target_q",用于标识这是一个用于目标网络的 Q 网络。

  2. VALID_ACTIONS=VALID_ACTIONS:这是一个用于指定有效动作的参数。VALID_ACTIONS 是一个包含所有有效动作的列表或数组,用于定义 Q 网络的输出层的大小。在 QNetwork 类的内部,输出层的大小将根据这个参数来设置,以匹配环境中的有效动作的数量。

通过传入这些参数,target_net 对象就被初始化为一个具有特定命名空间和输出层大小的 Q 网络,专门用于目标网络的更新操作。在后续的代码中,可以通过 target_net 对象调用 Q 网络的方法,如 target_net.predict()target_net.update(),来进行目标网络的预测和更新操作。


http://www.niftyadmin.cn/n/224917.html

相关文章

线程同步与互斥【Linux】

文章目录1. 引入2. 前导概念2.1 同步与异步2.2 互斥与并发2.3 原子性操作2.4 临界资源和临界区临界资源临界区如何管理3. 互斥锁3.1 引入3.2 概念3.3 示例pthread_mutex函数家族用法全局锁局部锁3.4 性能损耗3.5 串行执行3.6 补充4. 互斥锁的实现原理4.1 线程的执行和阻塞4.2 自…

微搭低代码学习之基础操作

低代码开发平台,是一种方便产生应用程序的平台软件,软件会开发环境让用户以图形化接口以及配置编写程序,而不是用传统的程序设计作法。此平台可能是针对 某些种类的应用而设计开发的,例如数据库、业务过程、以及用户界面。这类平台…

SpringSecurity之CSRF

前言 前一篇讲解了关于用户注销以及自动登录(记住我)等功能。今天我们来看一下关于CSRF的使用及避免。 什么是CSRF 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 ses…

Java多线程基础面试总结(二)

创建三种线程的方式对比 使用实现Runnable、Callable接口的方式创建多线程。 优势 Java的设计是单继承的设计,如果使用继承Thread的方式实现多线程,则不能继承其他的类,而如果使用实现Runnable接口或Callable接口的方式实现多线程&#xf…

Experiment01初始Matlab语言及编程环境

1.为了使命令窗口的命令行换行而不执行结果,实现多行输入,可以在命令末尾加上( )。 答:三点省略号 2.为了使命令窗口的命令行不显示执行结果,可以在命令后加上( )。 答&#xff1…

「SQL面试题库」 No_37 判断三角形

🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试&#xff0…

基于Spring、SpringMVC、MyBatis的失物招领系统

文章目录 项目介绍主要功能截图:后台登录个人中心用户管理报失信息管理失物信息管理留言管理认领申请管理公告信息管理前台报失信息失物信息公告信息留言墙部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、…

开发分享:JD平台满足多语言开发+高并发的API接口接入实例

参数说明 通用参数说明 url说明 https://api-gw.onebound.cn/平台/API类型/ 平台:淘宝,京东等, API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_api_keysecret:调用secret,测试secret:(不用填写…