DQN网络代码调用env.reset()后存储观测信息报错问题ValueError: setting an array element with a sequence.解决处理

2023-05-16

在强化学习DQN网络代码实现过程中,针对gym环境中的LunarLander-v2模拟游戏进行学习任务。我的部分代码如下,首先是Agent的状态存储过程:

def __init__(self,gamma,epsilon,lr,input_dims,batch_size,n_actions,    
        # ....此前省略 ....
        self.state_memory = np.zeros((self.mem_size,*input_dims),dtype=np.float32)
        self.new_state_memory = np.zeros((self.mem_size,*input_dims),dtype=np.float32)
        
        self.action_memory = np.zeros(self.mem_size,dtype=np.int32)
        self.reward_memory = np.zeros(self.mem_size,dtype=np.float32)
        self.terminal_memory = np.zeros(self.mem_size,dtype=np.bool)
    def store_transitons(self,state,action,reward,state_,done):
        index = self.mem_cntr % self.mem_size
        self.state_memory[index] = state
        self.action_memory[index] = action
        self.new_state_memory[index] = state_
        self.terminal_memory[index] = done
        self.reward_memory[index] = reward

下面是main代码中的学习循环过程:

if __name__ == '__main__':
    env = gym.make('LunarLander-v2')
    agent = Agent(gamma= 0.99 ,epsilon=1.0 , batch_size=64, n_actions=4,
    eps_end= 0.01 ,input_dims=[8], lr=0.003)
    scores,eps_history = [],[]
    n_games = 10
    for i in range(n_games):
        score = 0
        done = False
        observation  = env.reset() 
        while not done:
            action = agent.choose_action(observation)
            observation_, reward, done, info, __ = env.step(action)
            score += reward
            agent.store_transitons(observation,action,reward,observation_,done)
            agent.learn()
            observation = observation_
        scores.append(score)
        eps_history.append(agent.epsilon)
        # .................#

执行上述代码后报错:

Traceback (most recent call last):
  File ".\main_Lunar_lander.py", line 21, in <module>
    agent.store_transitons(observation,action,reward,observation_,done)
  File "D:\College\Projects\Person_Research\DQN_From_Yotube\DQN.py", line 59, in store_transitons
    self.state_memory[index] = state
ValueError: setting an array element with a sequence. The requested array would exceed the maximum number of dimension of 1.

报错信息提示为数据维度不对应,也即最初通过observation = env.reset()得到的的变量observation类型与Agent存储时的np.float32类型不匹配,而gym官方文档对reset()函数的描述为:在这里插入图片描述
因此怀疑返回的observation有问题,于是通过print('observation:',observation)打印观察返回的observation,显示如下:在这里插入图片描述
reset()函数返回的是一个array类型以及其中数据的type!
因此需要将observation指定为真正需要的array信息即可,observation,__ = env.reset()

    for i in range(n_games):
        score = 0
        done = False
        observation,__  = env.reset() 
        while not done:
            action = agent.choose_action(observation)
            observation_, reward, done, info, __ = env.step(action)
            score += reward
            agent.store_transitons(observation,action,reward,observation_,done)
            agent.learn()
            observation = observation_

此后再次运行,网络就可以正常工作了:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DQN网络代码调用env.reset()后存储观测信息报错问题ValueError: setting an array element with a sequence.解决处理 的相关文章

  • Http权威指南笔记(十四)-内容协商与转码

    现在很多国际化的一些Web服务都会根据不同地区使用的语言不同 xff0c 返回不同语言的页面内容展示给用户 而这里面就涉及到本篇介绍的内容 内容协商与转码 1 内容协商的技术 目前的内容协商技术主要有3种 客户端驱动协商 服务器驱动协商和透
  • php curl 分离header和body信息

    php curl 分离header和body信息 php中可以通过curl来模拟http请求 xff0c 同时可以获取http response header和body xff0c 当然也设置参数可以只获取其中的某一个 当设置同时获取res
  • 文件缓冲区

    系统自动在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区从内存向磁盘输出数据 xff0c 必须先送到内存中的缓冲区 xff0c 装满缓冲区后才一起送到磁盘 如果从磁盘向计算机读入数据 xff0c 则一次从磁盘文件将一批数据输入到内存缓
  • 【UE4学习】5.相机和蓝图进阶

    文章目录 相机基础Project Setting控制输入按键事件控制相机设置追踪目标CameraManager实现相机切换API接口与多态蓝图之间的通信方式GameMode 43 Manager显示当前相机信息事件调度器Sequencer入
  • 动态绑定实现的原理

    当用virtual关键字来声明一个成员函数 xff0c 编译器机会根据动态绑定机制在幕后完成一些工作 当编译器发现类中有虚函数的时候 xff0c 编译器会创建一张虚函数表 xff0c 把虚函数的函数入口地址放到虚函数表中 xff0c 并且在
  • 模板函数实现数组排序

    template lt class T gt void sortfun T arr int len int i j T tmp for i 61 0 i lt len 1 i 43 43 for j 61 i j lt len 1 j 43
  • 静态转换和动态转换

    1 静态转换 静态转换用于 xff0c 普通数据类型间的转换 xff0c 具有继承关系的父子类指针或引用的转换 class Dad class Son public Dad class MyClass 基础类型转换 void test1 i
  • 文件的原子操作

    文件的原子操作是指一个操作一旦启动 xff0c 则无法能被破坏它的其它操作打断 1 写文件原子操作 无论是两个打开 xff0c 还是dup xff0c 同时操作一个文件都可能引起混乱 xff0c 解决这个问题的方法是 xff0c 可以通过O
  • 目录操作

    创建目录 xff1a int mkdir const char pathname mode t mode xff1b pathname xff0c 路径 xff1b mode xff0c 目录访问权限 xff1b 返回值 xff1a 成功
  • 【UE4学习】6.粒子系统

    文章目录 粒子系统常用参数Simple Sprite Burst EmitterEmitter SettingsEmitter SpawnEmitter UpdateParticle SpawnParticle UpdateAdd Even
  • java中Array/List/Map/Object与Json互相转换详解

    JSON JavaScript Object Notation xff1a 是一种轻量级的数据交换格式 一 JSON建构有两种结构 xff1a 对象和数组 1 对象 xff1a 对象在js中表示为 扩起来的内容 xff0c 数据结构为 ke
  • ZipInputStream解压远程文件报错,java.lang.IllegalArgumentException: MALFORMED[1]

    我遇到的问题是报的这个错java lang IllegalArgumentException MALFORMED 1 at java util zip ZipCoder toString ZipCoder java 65 不是 java l
  • OAuth2.0接百度平台进行授权

    百度开发文档 xff1a https openauth baidu com doc regdevelopers html 1 注册开发者账号并创建一个应用 2 创建应用后 xff0c 获取API Key和Secret Key 3 创建一个S
  • Spring 中最常用的 11 个扩展点

    1 自定义拦截器 spring mvc拦截器根spring拦截器相比 xff0c 它里面能够获取HttpServletRequest和HttpServletResponse等web对象实例 spring mvc拦截器的顶层接口是 xff1a
  • 经典排序算法

    https juejin cn post 7198840786766102589
  • SpringBoot项目启动加载时排除某一个类

    在Application启动类上 xff0c 用这个注解就可以指定某个类不加载进容器 64 ComponentScan
  • 手写一个生产者/消费者模式(三种方式实现)

    这种设计模式需要满足以下三点要求 xff1a xff08 1 xff09 生产者生产数据到缓冲区中 xff0c 消费者从缓冲区中取数据 xff08 2 xff09 如果缓冲区已经满了 xff0c 则生产者线程阻塞 xff1b xff08 3
  • Android中Okhttp,Volley,Retrofit网络框架优缺点及对比

    Okhttp xff1a Square 公司开源的 OkHttp 是一个专注于连接效率的 HTTP 客户端 OkHttp 提供了对 HTTP 2 和 SPDY 的支持 xff0c 并提供了连接池 xff0c GZIP 压缩和 HTTP 响应
  • Google身份验证服务端实现

    import org apache commons codec binary Base32 import org apache commons codec binary Base64 import javax crypto Mac impo
  • 下载jdk8登录账号

    目前在官网下载低于jdk1 8的java jdk的时候需要登陆 xff0c 这边分享一个账号 xff0c 方便下载 2696671285 64 qq com 密码 xff1a Oracle123

随机推荐