什么时候不使用张量

时间:2019-10-14 17:27:31

标签: python-3.x machine-learning pytorch tensor

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

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

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

例如,我有一个基本的未完成代码段,用于收集环境的动作,不确定是否坚持使用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)

1 个答案:

答案 0 :(得分:0)

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

此外,我建议您阅读此answer 还有这个blog post