前言
训练结果文件路径:E:\ml-agents-release_19\results\push_block_test_02(具体路径以自己电脑为准)
ML-Agents安装和PushBlock训练过程请见:(注意:push_block_test_02没有全部训练完毕)
参考博客:https://blog.csdn.net/aaaccc444/article/details/130253172
1. push_block_test_02
1.1 PushBlock
1.1.1 checkpoint.pt
checkpoint.pt
是ML-Agents在训练过程中保存的一个检查点文件,包含了当前训练状态下所有的模型参数。这个文件是使用PyTorch的torch.save()
函数进行保存的,其中包含了一个字典对象,记录了当前训练状态下所有的神经网络参数和优化器参数等。
保存检查点文件的主要目的是为了方便后续的模型推理或者继续训练。
在推理阶段,可以加载之前保存的检查点文件,使用保存的模型参数进行模型预测;在继续训练阶段,可以加载之前保存的检查点文件,继续从上次训练的状态下进行训练,而不是从头开始重新训练,从而节省训练时间。
checkpoint.pt
文件是PyTorch中的模型权重文件,可以使用PyTorch加载器(如torch.load()
)加载并读取其中的权重信息。具体使用方法可以参考PyTorch官方文档中的相关章节。
1.1.2 events.out.tfevents.1681914599.DESKTOP-EL11195.21140.0
(1)events.out.tfevents.*
文件是TensorBoard的日志文件,记录了训练过程中的各种信息,如损失函数变化、准确率变化等。可以使用TensorBoard读取这些日志文件,生成相应的可视化图表。要使用TensorBoard查看events.out.tfevents.*
文件,可以在命令行中运行以下命令:
tensorboard --logdir=path/to/logs
其中path/to/logs
是events.out.tfevents.*
文件所在的目录。执行命令后,TensorBoard会启动一个Web服务器,并自动在浏览器中打开相应的网页。在网页上,可以选择不同的图表,查看训练过程中各种信息的变化趋势。
例如:
(mlagents) E:\ml-agents-release_19>tensorboard --logdir=E:\ml-agents-release_19\results\push_block_test_02\PushBlock
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.12.2 at http://localhost:****/ (Press CTRL+C to quit)
(2).1681914599.DESKTOP-EL11195.21140.0 这部分是 TensorBoard 保存日志时的标识,它由三个部分组成,分别是:
- 1681914599:实验运行的时间戳。表示实验运行的开始时间,通常以秒为单位。在 TensorFlow 中,每个事件文件都带有一个时间戳,以帮助区分不同运行的事件。时间戳通常指的是从 1970 年 1 月 1 日 00:00:00 UTC 到某个时间的总秒数。这个时间戳是计算机中常用的一种时间表示方法,可以方便地进行时间的比较和计算。在ML-Agents中,时间戳一般用来表示实验运行的开始时间或者结束时间。
- DESKTOP-EL11195:计算机名称。"DESKTOP-EL11195" 是运行 TensorBoard 的计算机的主机名(hostname)。它是计算机在网络上的唯一标识符,有助于区分不同计算机。
- 21140.0:TensorBoard 进程 ID。在运行TensorBoard时,TensorBoard会自动分配一个唯一的进程ID(process ID)作为标识符,以便在多个TensorBoard实例同时运行时,可以区分不同的实例。这个进程ID通常是一个整数,而小数部分则是启动TensorBoard的时间戳。例如,21140.0表示进程ID为21140,启动时间戳为0。
- 这些信息有助于在多个 TensorBoard 进程和计算机之间区分不同的日志。
1.1.3 PushBlock-16269.onnx
PushBlock-16269.onnx 是一个模型文件,用于在 ML-Agents 中进行强化学习训练。ONNX(Open Neural Network Exchange)是一种开放式格式,用于表示深度学习模型。在 ML-Agents 中,训练结束后会将训练好的模型保存成ONNX格式的文件,供后续推理使用。在这个例子中,PushBlock-16269.onnx 应该是训练到特定步骤时生成的模型文件,其中的数字“16269”表示生成该文件时的训练步骤数。
.onnx 文件可以使用 ONNX Runtime 或者其他支持 ONNX 格式的深度学习框架打开。
以下是使用 Python 和 ONNX Runtime 打开 .onnx 文件的示例代码:
import onnxruntime
# 加载模型
model_path = "path/to/model.onnx"
session = onnxruntime.InferenceSession(model_path)
# 输入数据
input_data = # 生成输入数据,格式为 numpy array
# 预测结果
output = session.run(None, {'input': input_data})
# 处理输出数据
# ...
需要注意的是,需要根据模型的输入、输出节点的名称和形状,来生成对应格式的输入数据。同时,不同的模型所依赖的库和运行环境也可能不同,需要根据具体情况进行安装和配置。
1.1.4 PushBlock-16269.pt
PushBlock-16269.pt
是在训练 PushBlock
场景时生成的模型权重文件,以 PyTorch 的 state_dict
格式保存了神经网络的权重参数。在训练结束后,根据用户在配置文件中设置的 keep_checkpoints
参数,训练过程中的一些关键步骤会被保存为检查点文件,以便在需要时恢复训练或者用于推理预测等任务。
PushBlock-16269.pt
文件包含了在训练到第 16269 步时的模型权重,可以用于加载模型并继续训练或进行推理预测等任务。这些模型参数通常保存在以 .pt
为后缀的文件中,文件名通常包含模型名称和训练步数等信息。
.pt文件是PyTorch模型保存的二进制文件,可以使用PyTorch加载模型。
以下是一个简单的例子,加载.pt文件并使用模型进行推断:
import torch
# 加载模型
model = torch.load("model.pt")
# 准备输入数据,这里的例子是一个大小为 (1, 3, 64, 64) 的张量
input_data = torch.randn(1, 3, 64, 64)
# 模型推断
output = model(input_data)
需要注意的是,如果你的模型是在 GPU 上训练的,需要在加载模型之前先调用 torch.cuda.set_device()
指定使用哪个 GPU 设备,否则可能会出现无法加载模型的情况。如果你的模型在 CPU 上训练,可以忽略这个步骤。
# 指定使用第 0 个 GPU 设备
torch.cuda.set_device(0)
# 加载模型
model = torch.load("model.pt")
1.2 run_logs
1.2.1 timers.json
timers.json
是一个记录训练过程中各个阶段时间的日志文件,它可以帮助开发者了解训练过程中各个操作的耗时情况,以便进行调优。在ML-Agents训练过程中,训练时间被分成许多不同的阶段,如Policy Evaluation、Environment Step等,timers.json
会记录每个阶段的名称、平均耗时、最大耗时和最小耗时等信息。
例如:
{
"Policy.Evaluate": {
"count": 1602,
"mean": 0.00036819224020337235,
"max": 0.002402134418487072,
"min": 0.00023801150512695312,
"stddev": 0.00010763366970706554,
"total": 0.5895571707486954
},
"Environment.Step": {
"count": 1602,
"mean": 0.013603404338185787,
"max": 0.08366680145263672,
"min": 0.006999969482421875,
"stddev": 0.007571674113586825,
"total": 21.780235171318054
},
...
}
以上是timers.json
的一个例子,其中记录了两个阶段:Policy.Evaluate
和Environment.Step
。对于每个阶段,记录了它在训练过程中出现的次数、平均耗时、最大耗时和最小耗时等信息。开发者可以通过查看timers.json
文件来判断哪些操作的耗时比较长,从而优化训练过程。
1.2.2 training_state.json
training_state.json
是ML-Agents训练过程中保存的状态文件,其中包含了训练过程中的一些信息。以下是一个例子:
"checkpoints": [
{
"steps": 262415,
"file_path": "results\\push_block_test_02\\PushBlock\\PushBlock-262415.onnx",
"reward": 4.971129466943881,
"creation_time": 1681915062.002365,
"auxillary_file_paths": [
"results\\push_block_test_02\\PushBlock\\PushBlock-262415.pt"
]
},
这段代码是training_status.json文件中checkpoints的一个例子,它表示模型训练到某一步后生成的检查点文件的信息。其中:
- steps:表示该检查点文件对应的模型训练步数。
- file_path:表示该检查点文件的路径。
- reward:表示该检查点对应的平均奖励值。
- creation_time:表示该检查点文件的创建时间。
- auxillary_file_paths:表示该检查点文件所需要的辅助文件的路径,比如训练过程中保存的优化器状态等。
"metadata": {
"stats_format_version": "0.3.0",
"mlagents_version": "0.28.0",
"torch_version": "1.7.1+cpu"
}
这段代码是 training_status.json 文件中的 metadata 字段,记录了训练状态的元数据信息,包括:
- stats_format_version:训练统计数据格式的版本号。
- mlagents_version:使用的 ML-Agents 工具包版本号。
- torch_version:使用的 PyTorch 版本号。
1.3 configuration.yaml
configuration.yaml
是 ML-Agents 工具中用来配置训练和推理参数的主要配置文件。该文件包含了许多用于定义智能体、环境、神经网络和训练参数的配置选项。在训练和推理过程中,ML-Agents 将从此文件中读取所需的配置信息,以确定如何进行训练和推理。
以下是 configuration.yaml
中的一些常用配置选项:
brain
: 定义智能体的神经网络模型、智能体的决策策略、智能体的学习算法等。environment
: 定义环境的属性,如环境名称、观测空间、动作空间等。hyperparameters
: 定义训练的超参数,如学习率、批量大小、优化器等。behaviors
: 定义多个智能体以及它们之间的关系和交互方式。checkpoint_settings
: 定义训练期间保存检查点的参数,如保存频率、保存路径等。
通过修改 configuration.yaml
文件中的参数,可以更改 ML-Agents 的训练和推理行为,以适应不同的应用场景和任务需求。
configuration.yaml
default_settings: null
behaviors:
PushBlock:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 2048
learning_rate: 0.0003
beta: 0.01
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
beta_schedule: linear
epsilon_schedule: linear
network_settings:
normalize: false
hidden_units: 256
num_layers: 2
vis_encode_type: simple
memory: null
goal_conditioning_type: hyper
deterministic: false
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
network_settings:
normalize: false
hidden_units: 128
num_layers: 2
vis_encode_type: simple
memory: null
goal_conditioning_type: hyper
deterministic: false
init_path: null
keep_checkpoints: 5
checkpoint_interval: 500000
max_steps: 2000000
time_horizon: 64
summary_freq: 60000
threaded: false
self_play: null
behavioral_cloning: null
env_settings:
env_path: null
env_args: null
base_port: 5005
num_envs: 1
num_areas: 1
seed: -1
max_lifetime_restarts: 10
restarts_rate_limit_n: 1
restarts_rate_limit_period_s: 60
engine_settings:
width: 84
height: 84
quality_level: 5
time_scale: 20
target_frame_rate: -1
capture_frame_rate: 60
no_graphics: false
environment_parameters: null
checkpoint_settings:
run_id: push_block_test_02
initialize_from: null
load_model: false
resume: true
force: false
train_model: false
inference: false
results_dir: results
torch_settings:
device: null
debug: false
1.4 PushBlock.onnx
PushBlock.onnx是Unity ML-Agents Toolkit中的一个模型文件,用于存储已经训练好的深度学习模型。这个文件是使用ONNX(Open Neural Network Exchange)格式保存的,该格式被设计为在不同深度学习框架之间共享模型的标准格式之一。通过使用PushBlock.onnx文件,我们可以在Unity中使用训练好的模型,使智能体在环境中更好地执行任务。
推荐安装netron
用于查看 onnx 模型结构(pip install netron
)
netron在线版本:浏览器中输入链接:https://lutzroeder.github.io/netro/
参考博客:https://blog.csdn.net/aaaccc444/article/details/130253172
参考博客:网络可视化工具netron详细安装流程_pip install nerton_江大白*的博客-CSDN博客