更新:这是 tensorflow 中的一个错误。在此处跟踪进度。
我已经使用稳定基线创建并训练了一个模型,该模型使用 Tensorflow 1。现在我需要在我只能访问 Tensorflow 2 或 PyTorch 的环境中使用这个训练模型。我想我会使用 Tensorflow 2,因为文档说我应该能够加载使用 Tensorflow 1 创建的模型。
我可以在 Tensorflow 1 中毫无问题地加载 pb 文件:
global_session = tf.Session()
with global_session.as_default():
model_loaded = tf.saved_model.load_v2('tensorflow_model')
model_loaded = model_loaded.signatures['serving_default']
init = tf.global_variables_initializer()
global_session.run(init)
Run Code Online (Sandbox Code Playgroud)
但是在 Tensorflow 2 中,我收到以下错误:
can_be_imported = tf.saved_model.contains_saved_model('tensorflow_model')
assert(can_be_imported)
model_loaded = tf.saved_model.load('tensorflow_model/')
ValueError: Node 'loss/gradients/model/batch_normalization_3/FusedBatchNormV3_1_grad/FusedBatchNormGradV3' has an _output_shapes attribute inconsistent with the GraphDef for output #3: Dimension 0 in both shapes must be equal, but are 0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Stable Baselines3 中使用自定义环境实现 SAC,但我不断收到标题中的错误。任何非策略算法都会发生该错误,而不仅仅是 SAC。
追溯:
File "<MY PROJECT PATH>\src\main.py", line 70, in <module>
main()
File "<MY PROJECT PATH>\src\main.py", line 66, in main
model.learn(total_timesteps=timesteps, reset_num_timesteps=False, tb_log_name=f"sac_{num_cars}_cars")
File "<MY PROJECT PATH>\venv\lib\site-packages\stable_baselines3\sac\sac.py", line 309, in learn
return super().learn(
File "<MY PROJECT PATH>\venv\lib\site-packages\stable_baselines3\common\off_policy_algorithm.py", line 375, in learn
self.train(batch_size=self.batch_size, gradient_steps=gradient_steps)
File "<MY PROJECT PATH>\venv\lib\site-packages\stable_baselines3\sac\sac.py", line 256, in train
current_q_values = self.critic(replay_data.observations, replay_data.actions)
File "<MY PROJECT PATH>\venv\lib\site-packages\torch\nn\modules\module.py", line 1190, in _call_impl
return forward_call(*input, **kwargs)
File "<MY PROJECT PATH>\venv\lib\site-packages\stable_baselines3\common\policies.py", line 885, in forward
return tuple(q_net(qvalue_input) …Run Code Online (Sandbox Code Playgroud) 我正在尝试将稳定基线3库https://stable-baselines3.readthedocs.io/en/master/中的 PPO 算法应用到我制作的自定义环境中。
我不明白的一件事是下面这一行:
mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10, deterministic=True)
Run Code Online (Sandbox Code Playgroud)
我应该始终让确定性等于 True 吗?当我保持确定性=“真”时,我的自定义环境“以某种方式”总是得到解决(即总是返回 1 +/- 0 标准的奖励)。
当我将其更改为“False”时,它开始以合理的方式表现(即有时会成功(奖励=1),有时会失败(奖励=0)。
我刚刚开始自学具有稳定基线 3 的强化学习。我的长期目标是训练代理玩特定的回合制棋盘游戏。不过,目前我对新事物感到非常不知所措。
我已经实现了一个健身房环境,我可以用它来手动玩游戏或让它选择随机动作。
目前,我一直在尝试让一个模型根据观察结果向我提供行动。我的环境的动作空间是一个DiscreteSpace(256). 我创建的模型的环境为model = PPO('MlpPolicy', env, verbose=1)。当我稍后打电话时,model.predict(observation)我确实收到了一个看起来像是一个动作的号码。当重复运行时,我得到不同的数字,我认为这在未经训练的模型上是预期的。
不幸的是,在我的游戏中,大多数行为在大多数州都是非法的,我想过滤它们并选择最好的合法行为。或者简单地转储所有操作的输出结果,以了解正在发生的情况。
在浏览其他人的代码时,我看到了对model.action_probability(observation). 不幸的是,据我所知,该方法不是稳定基线 3 的一部分。从稳定基线 2 迁移到 v3 的指南仅提到它尚未实现 [ 1 ]。
你能给我一个关于如何继续的提示吗?
我试图在体育比赛中运行稳定的基线,但不断收到以下错误
Traceback (most recent call last):
File "/home/dev/Desktop/Projects/AI/NBA2/stable_baselines_run.py", line 35, in <module>
model.learn(total_timesteps=10000)
File "/home/dev/anaconda3/envs/sb/lib/python3.9/site-packages/stable_baselines3/a2c/a2c.py", line 189, in learn
return super(A2C, self).learn(
File "/home/dev/anaconda3/envs/sb/lib/python3.9/site-packages/stable_baselines3/common/on_policy_algorithm.py", line 234, in learn
continue_training = self.collect_rollouts(self.env, callback, self.rollout_buffer, n_rollout_steps=self.n_steps)
File "/home/dev/anaconda3/envs/sb/lib/python3.9/site-packages/stable_baselines3/common/on_policy_algorithm.py", line 166, in collect_rollouts
actions, values, log_probs = self.policy.forward(obs_tensor)
File "/home/dev/anaconda3/envs/sb/lib/python3.9/site-packages/stable_baselines3/common/policies.py", line 566, in forward
distribution = self._get_action_dist_from_latent(latent_pi, latent_sde=latent_sde)
File "/home/dev/anaconda3/envs/sb/lib/python3.9/site-packages/stable_baselines3/common/policies.py", line 607, in _get_action_dist_from_latent
return self.action_dist.proba_distribution(action_logits=mean_actions)
File "/home/dev/anaconda3/envs/sb/lib/python3.9/site-packages/stable_baselines3/common/distributions.py", line 326, in proba_distribution
self.distribution = [Categorical(logits=split) for split in th.split(action_logits, tuple(self.action_dims), dim=1)]
File "/home/dev/anaconda3/envs/sb/lib/python3.9/site-packages/stable_baselines3/common/distributions.py", …Run Code Online (Sandbox Code Playgroud) python artificial-intelligence reinforcement-learning stable-baselines
如何使用自定义环境将奖励添加到 Stable Baselines3 中的张量板日志记录中?
我有这个学习代码
model = PPO(
"MlpPolicy", env,
learning_rate=1e-4,
policy_kwargs=policy_kwargs,
verbose=1,
tensorboard_log="./tensorboard/")
Run Code Online (Sandbox Code Playgroud) python logging reinforcement-learning tensorboard stable-baselines
我以 Stable Baselines 3 的多处理示例为例,一切都很好。 https://colab.research.google.com/github/Stable-Baselines-Team/rl-colab-notebooks/blob/sb3/multiprocessing_rl.ipynb#scrollTo=pUWGZp3i9wyf
多处理训练比 num_cpu=4 的单处理训练花费的时间大约少 3.6 倍。
但是,当我尝试使用 PPO 代替 A3C,使用 BipedalWalker-v3 代替 CartPole-v1 时,我发现多处理模式下的性能更差。我的问题是:我做错了什么?为什么速度比较慢?
我的代码是:
import gym
import time
from stable_baselines3 import PPO
from stable_baselines3 import A2C
from stable_baselines3.common.env_util import make_vec_env
from stable_baselines3.common.evaluation import evaluate_policy
env_name = "BipedalWalker-v3"
num_cpu = 4
n_timesteps = 10000
env = make_vec_env(env_name, n_envs=num_cpu)
model = PPO('MlpPolicy', env, verbose=0)
start_time = time.time()
model.learn(n_timesteps)
total_time_multi = time.time() - start_time
print(f"Took {total_time_multi:.2f}s for multiprocessed version - {n_timesteps / total_time_multi:.2f} FPS")
single_process_model = PPO('MlpPolicy', …Run Code Online (Sandbox Code Playgroud) python multiprocessing reinforcement-learning openai-gym stable-baselines
因此,我最近重新回到机器学习领域,并决定开始“ConnectX”的 Kaggle 课程(https://www.kaggle.com/learn/intro-to-game-ai-and-reinforcement-learning)。我正在尝试做第 4 课,其中我使用稳定基线 + Tensorflow 来制作人工智能。问题是,我似乎无法正确使用稳定基线,因为当我尝试导入它时它立即给我一个错误。这是错误消息:
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-13-f5986851ce81> in <module>
1 import os
----> 2 from stable_baselines.bench import Monitor
3 from stable_baselines.common.vec_env import DummyVecEnv
4
5 # Create directory for logging training information
~\Anaconda3\lib\site-packages\stable_baselines\__init__.py in <module>
----> 1 from stable_baselines.a2c import A2C
2 from stable_baselines.acer import ACER
3 from stable_baselines.acktr import ACKTR
4 from stable_baselines.deepq import DQN
5 from stable_baselines.her import HER
~\Anaconda3\lib\site-packages\stable_baselines\a2c\__init__.py in <module>
----> 1 from stable_baselines.a2c.a2c import …Run Code Online (Sandbox Code Playgroud) 您能否建议一些稳定基线的替代方案,我可以用它来训练强化学习中的代理。
另外,我正在使用健身房迷你网格环境,所以请告诉我那些在这种环境中工作的人。
我正在尝试使用 stable-baselines3 库制作 PPO 模型。我想使用一个带有 LSTM 层的策略网络。然而,我在图书馆的网站上找不到这种可能性,尽管它存在于以前版本的 stable-baselines 中:https://stable-baselines.readthedocs.io/en/master/modules/policies.html#stable_baselines。 common.policies.MlpLstmPolicy。
在 stable-baselines3(不是 stable-baselines)中是否存在这种可能性?如果没有,我还有其他可能做到这一点吗?谢谢。
stable-baselines ×10
python ×7
openai-gym ×3
tensorflow ×3
logging ×1
python-3.x ×1
pytorch ×1
tensorboard ×1