Когда не стоит использовать Тензор - PullRequest
2 голосов
/ 14 октября 2019

Я уже некоторое время использую 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)

1 Ответ

0 голосов
/ 15 октября 2019

Ну, ответ зависит. При отладке кода существует компромисс между скоростью и четкостью. В случае, если ваши матрицы огромны, вы можете переключаться между тэгом numy и pytorch по той причине, что GPU будет выполнять операции намного быстрее, чем задержка преобразования. Поэтому сложно сказать, где находится порог (размера набора данных). Я бы попробовал несколько простых операций, чтобы сравнить варианты, а затем выбрать лучший метод, который работает для вас.

Кроме того, я предлагаю вам прочитать этот ответ , а также этот пост в блоге

...