1.前言

最近研究WorldModel世界模型,期望能在科研上有所突破,本文将记录我的调试代码流程,从零开始(这是第二次,第一次花了一天多,到最后包的路径有些乱,再重新开始做一个总结,希望对新手有些帮助)。
https://cloud.tencent.com/developer/news/224238
训练参考
https://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&mid=2652020138&idx=5&sn=013a0d05099c6381a742db040a85bc26&chksm=f121e95bc656604df056197e83985db6a59c7136d4450edb242af790e17e976976acdc6ef677&scene=0#rd
训练参考2号
https://github.com/AdeelMufti/WorldModels
另一份参考
https://segmentfault.com/a/1190000000485292
最后mpi报错原因
然而感觉他们都是翻译的,有一些指令有遗漏
关于配置路径,python各种包的引用环境
https://blog.csdn.net/qq_39004117/article/details/85306475
box2d

2.我的环境

ubuntu18.04

3.流程

(1)从github下载代码

https://github.com/AppliedDataSciencePartners/WorldModels.git
命令:
git clone https://github.com/AppliedDataSciencePartners/WorldModels.git

(2)创建一个Python3虚拟环境(这里使用的是virutalenv和virtualenvwrapper):

sudo apt-get install python-pip
//pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。
sudo pip install virtualenv
sudo pip install virtualenvwrapper
//安装两个虚拟软件
exportWORKON_HOME=~/.virtualenvs
//配置路径
source /usr/local/bin/virtualenvwrapper.sh
//ubuntu18.04里,通过pip安装virtualenvwrapper得到的virtualenvwrapper.sh被安装在/.local/bin/目录下,需要修改上面添加在/.bashrc的内容中的路径即可:
mkvirtualenv --python=/usr/bin/python3 worldmodels
//制作了一个虚拟环境名为worldmodels,在这个虚拟环境模式下所有包仅存在于这个包下

https://blog.csdn.net/GZHermit/article/details/78915999
conda虚拟环境命令
https://blog.csdn.net/a200822146085/article/details/89048172
virtualenvwrapper的虚拟环境使用命令

(3)安装程序包

1.sudo apt-get install cmake swig python3-dev zlib1g-dev python-opengl mpich xvfb xserver-xephyr vnc4server
2.cd WorldModels
//进入这个文件夹好根据requirements.txt里所需的包进行安装
3.pip install -r requirements.txt
//包比较多,耐心等一会没想到这一次竟然没有报错,之前在安装gym时一直过不去,可能和python版本与路径有关,也证明配好路径非常重要。

(4)生成随机训练数据

对于这个赛车问题,VAE和RNN都可以使用随机生成的训练数据——也就是在每个时间节点随机采取动作所生成的观测数据。实际上,我们可以使用伪随机动作,使车在初始状态就能加速离开起跑线。
每一张图片保存的格式

由于VAE和RNN独立于决策控制器,我们需要确保遇到各种各样的观测结果,并且选择不同行动来应对,并将结果保存为训练数据。

要生成随机策略,请从命令行运行以下命令:

python 01_generate_data.py car_racing --total_episodes 2000 --time_steps 300

如果你的服务器没有显示结果,你可以运行以下命令:

xvfb-run -a -s"-screen 0 1400x900x24"python01_generate_data.py

car_racing --total_episodes2000 --time_steps300

以上命令将会产生2000个策略,保存在200个批次中,每个批次10个)。

在./data文件夹中,你会看到以下文件(*为批次号):

obs_data_*.npy (此文件将64 * 64 * 3图像存储为numpy数组)

action_data_*.npy (此文件存储三维动作)从这一步就会发现网上的运行教程不严谨之处了,没有办法识别参数start_batch 0,去掉后正常运行,不知道是我这边有哪些环境没有配置好?


import numpy 后可以用pyton脚本查看其中文件具体内容,其中的一个文件包含300个图片信息(一个图片64*64 *3 ),同时有300个动作与reward,done,为以后的训练提供数据。

(5)训练VAE

这里我们只需要用obs_data_*.npy就可以训练VAE。确保你已经完成了第四步,否则这个文件不在./data文件夹下。

在命令行中运行下列语句:

python 02_train_vae.py --new_model

在每一批从0到9的数据中都会训练出一个新的变分自编码器VAE。模型的权重保存在./vae/weights.h5中。“–new_model”参数表明从头开始训练模型。

如果文件夹中已经存在weights.h5,也没有声明“–new_model”参数,脚本将直接导入这个文件中的权重,继续训练现有的模型。这样的话,你就可以实现模型的迭代训练,而不需要对每批数据都重新运行。

VAE架构的相关参数都在 ./vae/arch.py文件里声明。
如何打开h5文件?

(6)生成循环神经网络RNN数据

现在我们就可以利用这个训练好的VAE模型生成RNN模型的训练集。

RNN模型要求把经由VAE编码后的图像数据(z)和动作(a)作为输入,把一个时间步长前的由VAE模型编码后的图像数据作为输出。

运行这行命令可以生成这些数据:

python03_generate_rnn_data.py --start_batch–max_batch9

这一步需要把第0至9批的obs_data_.npy 和 action_data_.npy文件转成在RNN中训练所需要的格式。

这两组文件保存在./data(*是批量编号)

rnn_input_*.npy(存储了[z a]串联向量)

rnn_output_*.npy(存储了前一个时间步长的z向量)

(7)训练RNN模型

训练RNN只需要用到rnn_input_.npy和rnn_output_.npy文件。确认你已经完成了第六步,否则这个文件不在./data文件夹下。

在命令行运行:

python 04_train_rnn.py --new_model

在每一批从0到9的数据中都会训练出一个新的VAE。模型的权重保存在./rnn/weights.h5。“–new_model”表明从头开始训练模型。

和VAE训练很相似的是,如果文件夹中已经存在weights.h5,也没有声明“–new_model”标志,脚本将直接导入文件中的权重,继续训练现有的模型。这样的话,你就可以实现RNN模型的迭代训练,而不需要对每批数据都重新运行。

RNN循环神经网络模型的具体参数都在./rnn/arch.py文件里声明。

(8)训练控制器

运行下列代码将在你的机器上启动这个过程,并为变量选择合适的值。

python 05_train_controller.py car_racing --num_worker16–num_worker_trial4–num_episode16–max_length1000–eval_steps25

或者在服务器上运行,但不显示结果:

xvfb-run -s"-screen 0 1400x900x24"python05_train_controller.py

car_racing --num_worker16–num_worker_trial2–num_episode4–

max_length1000–eval_steps25

–num_worker 16:worker的个数不要超过可用内核的数量

–num_work_trial 2 :每个worker测试的群体成员的数量(num_worker * num_work_trial表示每一代群体的总规模)

–num_episode 4:为群体的每个成员进行打分的次数(分数将是该次打分的平均得分)

–max_length 1000:一次打分中最大时间步长

–eval_steps 25:每隔25步对权重进行评估

默认情况下,控制器每次运行都会从零开始,将进程的当前状态保存到controller目录的pickle文件中。这样你就可以通过指定相关文件,从上一次保存的地方继续训练。

每生成一代后,算法的当前状态和最佳权重的集合将会输出到./controller文件夹。

其中第二篇教程太坑了,原来是他其中的‘-’打错了。。。

然后跟第一次同样的问题,断言报错,只能将其中哪一行断言注释掉。

如果mpi报错:https://segmentfault.com/a/1190000000485292

(9)可视化结果

经过200代的训练,我已经训练出一个平均得分约为833.13的角色。我在谷歌云上使用配置为Ubuntu 16.04, 18 vCPU, 67.5GB RAM的机器,采用的是本文给出的步骤和参数。

在论文中,作者试图在2000代训练后达到约906的平均得分,这是迄今为止该环境下的最高分。他利用了稍高的规格设置(例如10,000集训练数据,群体大小设为64,64台核心机器,每次试验16次)。

如果你想可视化控制器的当前状态,那你只需要运行下列代码:

python model.py car_racing –filename

./controller/car_racing.cma.4.32.best.json --render_mode --record_video

–filename:想要添加到控制器的权重json的路径

–render_mode :在屏幕上显示环境

–record_video:输出mp4文件到./video文件夹,展现出每个片段

–final_mode:运行100次控制器测试,输出平均得分

WorldModel世界模型代码训练实录相关推荐

  1. AI版「盗梦空间」?谷歌大脑「世界模型」可实现在其梦境中对智能体进行训练

    图源:pixabay 原文来源:arXiv 原文链接:https://arxiv.org/pdf/1803.10122.pdf 作者:David Ha.Jurgen Schmidhuber 「雷克世界 ...

  2. 继LSTM之父用世界模型来模拟2D赛车后,谷歌又推出全新世界模型助力导航:360度无死角,就问你怕了没?...

    来源:AI科技评论本文约3400字,建议阅读10分钟 今年2月,Google AI 也用世界模型,在 Atari 游戏中实现了达到人类水平的表现. 近年来,世界模型(World Model)在机器人. ...

  3. 用少于10行代码训练前沿深度学习新药研发模型

    ©PaperWeekly · 作者|黄柯鑫 学校|哈佛大学硕士生 研究方向|图学习和生物医疗 深度学习正在革新药研发行业.在本文中,我们将展示如何使用 DeepPurpose,一个基于 PyTorch ...

  4. 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(八)—— 模型训练-训练

    系列目录: 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(一)--数据 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(二)-- 介绍及分词 菜鸟笔记-DuReader阅读理解基线模 ...

  5. U2Net、U2NetP分割模型训练---自定义dataset、训练代码训练自己的数据集

    前言 博客很久没有更新了,今天就来更新一篇博客吧,哈哈: 最近在做图像分割相关的任务,因此,写这么一篇博客来简单实现一下分割是怎么做的,内容简单,枯燥,需要耐心看,哈哈: 博客的内容相对简单,比较适合 ...

  6. 图灵奖得主杨立昆:GPT模式五年就不会有人用了,世界模型才是AGI未来

    本文经授权转自公众号腾讯科技(ID:qqtech) 2023年6月9日的北京智源大会上开幕式上,机器学习三巨头之一杨立昆(Yann Lecun)进行了远程致辞,发表了名为<朝向能学习, 思考和计 ...

  7. OpenAI发布最新「模拟机器人环境」,用「真实机器人」模型进行训练

    图:pixabay 本文转自雷克世界(ID:raicworld) 作者|MACIEK CHOCIEJ.PETER WELINDER等 「雷克世界」编译:嗯~阿童木呀 最近,我们发布了8个模拟机器人环境 ...

  8. 信息抽取(一)机器阅读理解——样本数据处理与Baseline模型搭建训练(2020语言与智能技术竞赛)

    机器阅读理解--样本数据处理与Baseline模型搭建训练 前言 样本数据处理 数据测试 模型部分 模型构建 模型训练 部分推理结果 总结 前言 最近看到今年早些时候百度的"2020语言与智 ...

  9. python编写赛车_「世界模型」实现,一步步让机器掌握赛车和躲避火球的技能

    前段时间,由谷歌大脑研究科学家 David Ha 与瑞士 AI 实验室 IDSIA 负责人 Jürgen Schmidhuber(他也是 LSTM 的提出者)共同提出的「世界模型」让人工智能在「梦境」 ...

最新文章

  1. Seaborn使用set_context函数调整绘图标签和线条的大小、设置不同的模式、例如notebook模式、PPT模式、海报模式等、set_context函数可以指定绘图上下文并自动调整标签和线条
  2. linux挂载home分区,Linux(CentOS6) 调整 /home 挂载 分区大小
  3. 【区块链基础知识系列】 第6课 区块链之分片技术(sharding)-区块链扩容问题的良方
  4. 嵌入式linux 实现mdev SD卡和U盘自动挂载和卸载的方法 mdev.conf
  5. 编写高质量的Makefile
  6. [html] 怎样禁用页面中的右键、打印、另存为、复制等功能?
  7. HTML中关于图像和表格,链接等的知识
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的仓库物品管理系统
  9. c语言const 修饰二级指针,C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)...
  10. java版b2b2c社交电商spring cloud分布式微服务-服务提供与调用
  11. 阿里云线上案例分析:网格应用存活状态异常
  12. Win10常用Win快捷键
  13. ECShop 批量打印快递单
  14. windows server 2008 R2 补丁下载地址
  15. rpm 打包及其命令
  16. java 文字串叠字检查_Java 正则表达式详细实例解析
  17. 基于微信公众平台API的菜谱小程序 的设计与实现
  18. 规避Variable used in lambda expression should be final or effectively final而引发了方法参数值拷贝的问题
  19. 关于MSELoss、BCELoss、CELoss损失函数求导的推导
  20. Yolo-v1~v3学习关键点整理

热门文章

  1. io输出pwm且占空比和频率同时可调驱动实现
  2. c语言实现rsa签名验证,C语言openssl库RSA签名
  3. teamlab什么意思_不好意思,我们的2019毕业季聚会,和前辈的不一样
  4. TI单芯片毫米波雷达1642代码走读(〇)——总纲
  5. swift之mutating关键字
  6. pytorch深度学习框架--gpu和cpu的选择
  7. 阿里数据库内核月报导航
  8. PCB原理图绘制(2)——工程文件的初步修改与设置
  9. Mysql中删除语句delete、truncate、drop的区别
  10. R语言基于mediation包行中介效应分析(2)