我正在尝试实现深度强化学习的异步方法,其中一个步骤需要在不同的步骤上累积渐变然后应用它.在tensorflow中实现这一目标的最佳方法是什么?我已经积累了渐变,我认为不是实现它的最快方法(从tensorflow到python和back的很多转移).欢迎任何建议.这是我的玩具NN的代码.它不会模拟或计算它只是运行我想要使用的操作的任何东西.
import tensorflow as tf
from model import *
graph = tf.Graph()
with graph.as_default():
state = tf.placeholder(tf.float32, shape=[None, 80,80,1])
with tf.variable_scope('layer1'):
W = weight_variable([8, 8, 1, 32])
variable_summaries(W, "layer1/W")
b = bias_variable([32])
variable_summaries(b, "layer1/b")
h = conv2d(state, W, 4) + b
activation = tf.nn.relu(h)
pool1 = max_pool_2x2(activation)
print(pool1.get_shape())
pool1 = tf.reshape(pool1, [-1, 3200])
with tf.variable_scope('readout'):
W = weight_variable([3200, 3])
b = bias_variable([3])
logits = tf.matmul(pool1, W) + b
variable_summaries(h, "y")
action_indexes = tf.placeholder(tf.int32, shape=[None], name="action_indexes")
loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, …Run Code Online (Sandbox Code Playgroud) 我正在从连续状态空间的离散化过渡到函数逼近。我的动作和状态空间(3D)都是连续的。我的问题主要是由于混叠导致的错误,并且在长时间训练后几乎没有收敛。此外,我无法弄清楚如何为离散化选择正确的步长。
阅读 Sutton & Barto 帮助我理解了瓦片编码的力量,即具有由多个相互重叠的受侵扰瓦片描述的状态空间。给定一个连续的查询/状态,它由 N 个基函数描述,每个基函数对应于它所属的纵横交错的单个块/正方形。
1) 性能与高度离散的状态空间有何不同?
2)任何人都可以指点我在python中使用tile编码的工作示例吗?我同时学习了太多东西并且变得超级困惑!(Q 学习、离散化困境、瓦片编码、函数逼近和处理问题本身)
对于 RL 中的连续问题,似乎没有任何详尽的 Python 编码教程。
python artificial-intelligence machine-learning reinforcement-learning
我想知道什么时候人们会决定诉诸强化学习来解决以前通过数学优化方法解决的问题——想想旅行商问题或工作调度或出租车共享问题。
由于强化学习旨在以与运筹学尝试优化某个成本函数的结果类似的方式最小化/最大化某个成本/奖励函数,我认为可以解决两方之一可以解决的问题由另一个。然而,情况是这样吗?两者之间有取舍吗?关于上述问题,我还没有真正看到对 RL 进行的太多研究,但我可能会弄错。
如果有人有任何见解,他们将不胜感激!!
optimization mathematical-optimization reinforcement-learning operations-research
我正在尝试在 python 中进行强化学习。我使用的是 Tensorflow 2.1,我的机器有多个 GPU(带有 CUDA 10.2 驱动程序 440.59)。我正在使用 tf.device() 在我的 GPU 上分配操作。我没有使用 tf.distribute.Strategy。我正在构建我的模型:
with tf.device(USE_GPU):
model = build_keras_Seq()
Run Code Online (Sandbox Code Playgroud)
其中 build_keras_Seq() 使用功能 AP 创建模型:
model = tf.keras.Model(inputs=inputs, outputs=outputs)
Run Code Online (Sandbox Code Playgroud)
我所有的输入都是与我的模型在同一 GPU 上分配的张量。
with tf.device(USE_GPU):
self.images_gpu = tf.zeros(shape=(1,IMG_HEIGHT,IMG_WIDTH), dtype=tf.int16) # (165, 160, 1)
self.actions_gpu = tf.zeros(shape=(1,), dtype=tf.int16)
self.rewards_gpu = tf.zeros(shape=(1,), dtype=tf.int16)
self.dones_gpu = tf.zeros(shape=(1,), dtype=tf.int16)
Run Code Online (Sandbox Code Playgroud)
我的目标是由 @tf.function 计算的,它实现了预期的 SARSA 并在 GPU 上返回一个张量:
target_train is on device: /job:localhost/replica:0/task:0/device:GPU:1
Run Code Online (Sandbox Code Playgroud)
当我调用model.fit时,似乎在CPU上执行了很多操作(见下文)导致性能不佳。我的理解是张量在被发送到 GPU 之前被移回 CPU。关于如何防止这种行为并将张量直接从 GPU 馈送到同一 GPU 上托管的模型的任何想法?
2020-02-23 09:49:32.100259: I tensorflow/core/common_runtime/eager/execute.cc:573] Executing op …Run Code Online (Sandbox Code Playgroud) 使用OpenAIgym时,使用 导入库后import gym,可以使用 来查看动作空间env.action_space。但这仅给出了动作空间的大小。我想知道动作空间的每个元素对应什么样的动作。有简单的方法吗?
我有一些关于使用torch.multiprocessing模块的问题。假设我有一个torch.nn.Module电话model,我打电话model.share_memory()给它。
如果两个线程同时调用forward(), 即会发生什么情况model(input)?安全吗?或者我应该使用锁定机制来确保model多个线程不会同时访问?类似地,如果两个或多个线程有一个优化器工作model.parameters()并且它们同时调用会发生什么optimizer.step()?
我问这些问题是因为我经常看到在optimizer.step()没有锁定机制的共享模型上被调用(即在 A3C 或 ACER 的 RL 实现中),我想知道这样做是否安全。
我试图在体育比赛中运行稳定的基线,但不断收到以下错误
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
进口健身房
\nif __name__ == "__main__":\n env = gym.make("CartPole-v0")\n env = gym.wrappers.Monitor(env, "recording")\n\n total_reward = 0.0\n total_steps = 0\n obs = env.reset()\n\n while True:\n action = env.action_space.sample()\n obs, reward, done, _ = env.step(action)\n total_reward += reward\n total_steps += 1\n if done:\n break\n\n print("Episode done in %d steps, total reward %.2f" % (\n total_steps, total_reward))\n env.close()\n env.env.close()\nRun Code Online (Sandbox Code Playgroud)\n这些代码来自\xef\xbc\x9aMaxim Lapan。深度强化学习实践
\n当我运行这些代码时,我得到这个:“gym.wrappers”没有属性“Monitor”
\n我尝试在谷歌上搜索以找到答案,但我仍然不知道解决问题的方法。
\n我很难弄清楚应该使用什么以及何时使用矢量化环境。如果您能提供一个用例示例,那就太好了。
SB3 中矢量化环境的文档: https://stable-baselines3.readthedocs.io/en/master/guide/vec_envs.html
python ×3
deepl ×1
gpu ×1
logging ×1
openai-gym ×1
optimization ×1
pytorch ×1
tensorboard ×1
tensorflow ×1
tf.keras ×1