Так что я изо всех сил пытаюсь понять некоторую терминологию о коллекциях в Pytorch. Я продолжаю сталкиваться с однотипными ошибками о том, что диапазон моих тензоров неверен, и когда я пытаюсь найти решение в Google, объяснения еще больше сбивают с толку.
Вот пример :
m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([0.3300, 0.3937, -0.3113, -0.2880])
output = m(input)
Я не вижу ничего плохого в приведенном выше коде, и я определил мой LogSoftmax
для принятия одномерного ввода. Таким образом, согласно моему опыту работы с другими языками программирования, коллекция [0.3300, 0.3937, -0.3113, -0.2880]
представляет собой одно измерение.
Вышеприведенное вызывает следующую ошибку для m(input)
:
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
Что это значит?
Я передал одномерный тензор, но потом он говорит мне, что ожидал диапазон [-1, 0], but got 1
.
- Диапазон чего?
- Почему ошибка сравнения размеров
1
с [-1, 0]
? - Что означают два числа
[-1, 0]
?
Я искал объяснение этой ошибки, и я нахожу такие вещи, как эта ссылка, которые не имеют смысла для меня как программиста:
https://github.com/pytorch/pytorch/issues/5554#issuecomment -370456868
Так что я смог чтобы исправить вышеприведенный код, добавив другое измерение в мои тензорные данные.
m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([[-0.3300, 0.3937, -0.3113, -0.2880]])
output = m(input)
Так что это работает, но я не понимаю, как [-1,0]
объясняет вложенную коллекцию.
Дальнейшие эксперименты показал, что также работает следующее:
m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([[0.0, 0.1], [1.0, 0.1], [2.0, 0.1]])
output = m(input)
Итак, dim=1
означает коллекцию коллекций, но я не понимаю, как это означает [-1, 0]
.
Когда я пытаюсь использовать LogSoftmax(dim=2)
m = torch.nn.LogSoftmax(dim=2)
input = torch.tensor([[0.0, 0.1], [1.0, 0.1], [2.0, 0.1]])
output = m(input)
Выше приведено следующее сообщение об ошибке:
IndexError: Размер вне диапазона (ожидается, что он находится в диапазоне [-2, 1], но получил 2)
Опять путаница, что dim=2
равно [-2, 1]
, потому что где 1
значение взято из?
Я могу исправить вышеуказанную ошибку путем вложения коллекций другого уровня, но на данный момент я не понимаю, какие значения LogSoftmax
ожидают.
m = torch.nn.LogSoftmax(dim=2)
input = torch.tensor([[[0.0, 0.1]], [[1.0, 0.1]], [[2.0, 0.1]]])
output = m(input)
Меня очень смущает эта терминология [-1, 0]
и [-2, 1]
?
Если первое значение является вложенной глубиной, то почему оно отрицательно и что может означать второе число?
Нет кода ошибки , связанного с этой ошибкой. Поэтому было трудно найти документацию по этому вопросу. Кажется, это чрезвычайно распространенная ошибка, из-за которой люди смущаются, и я ничего не могу найти в документации по Pytorch, в которой конкретно говорится об этом.