2

我使用 PyTorch 已经有一段时间了,正在制作一个通用的 RL 框架。我遇到了是否使用 np.arrays 或张量的问题。

什么时候你不想使用可用的张量?是什么让你选择 numpy 而不是 pytorch?显然张量对于 ML 模型很重要,但是如果您只想进行基本的图像处理或列表操作怎么办?

我很想尽可能使用张量,但不知道有什么陷阱。(图形混乱?内存泄漏??)

例如,我有一个基本未完成的代码片段,用于收集 env 的操作,不确定是否坚持使用 numpy。

@dataclass
class Action(object):
    """
    Handles actions, action space, and value verification.
    """
    taken_action: np.array
    raw_action: np.array
    n_possible_values: int
    action_space: gym.Space

    def __post_init__(self):
        if type(self.taken_action) is not np.array: taken_action = np.array([self.taken_action])

@pytest.mark.parametrize("env", sorted([env.id for env in gym.envs.registry.all()]))
def test_action_data_structure(env):
    try:
        init_env = gym.make(env)
    except error.DependencyNotInstalled as e:
        print(e)
        return

    taken_action = init_env.action_space.sample()
    raw_action = np.random.rand(init_env.action_space.n)
    state, reward, done, info = init_env.step(taken_action)

    action_dataclass = Action(taken_action=taken_action, raw_action=raw_action,
                              n_possible_values=init_env.action_space.n, action_space=init_env.action_space)

4

1 回答 1

0

好吧,答案是视情况而定。调试代码时,需要在速度和清晰度之间进行权衡。如果你的矩阵很大,你可以在 numpy 和 pytorch 张量之间跳转,因为 GPU 运行操作的速度比转换的延迟快得多。所以很难说(数据集大小的)阈值在哪里。我会尝试一些简单的操作来比较选项,然后确定最适合您的方法。

另外,我建议您阅读此答案 以及此博客文章

于 2019-10-15T11:23:06.673 回答