ValuerError относительно размеров при объявлении тензора PyTorch - PullRequest
1 голос
/ 07 января 2020

В настоящее время я пытаюсь преобразовать список значений в тензор PyTorch и столкнулся с некоторыми трудностями.

Точный код, который вызывает ошибку:

input_tensor = torch.cuda.FloatTensor(data)

Здесь, data - это список с двумя элементами: первый элемент - это еще один список массивов NumPy, а второй элемент - это список кортежей. Размеры обоих списков различаются, и я считаю, что это вызывает следующую ошибку:

*** ValueError: expected sequence of length x at dim 2 (got y)

Обычно y больше, чем x. Я попытался поиграть с терминалом I Python, чтобы увидеть, что не так, и оказалось, что попытка преобразовать данные этого формата непосредственно в тензоры PyTorch не работает. Тем не менее, взятие каждого отдельного элемента из списка data и преобразование его в тензоры работает.

Кто-нибудь знает, почему это не работает, и, возможно, также сможет дать некоторые отзывы о том, как достичь моей первоначальной цели ? Заранее спасибо.

1 Ответ

0 голосов
/ 07 января 2020

Предположим, что первый подсписок data содержит n 1D массивы, каждый из которых имеет размер m, а второй подсписок содержит k кортежи, каждый из которых имеет размер p.

. При вызове torch.FloatTensor(data) каждый подсписок преобразуется в 2D-тензор формы (n, m) и формы (k, p) соответственно; затем они складываются вместе, чтобы сформировать трехмерный тензор. Это возможно, только если n=k и m=p - думать о трехмерном тензоре как о кубоиде.

Я думаю, это совершенно очевидно, поэтому я предполагаю, что у вас есть m = p и вы хотите создать 2D тензор формы (n+k, m) путем простого объединения двух подсписков:

torch.FloatTensor(np.concatenate(data))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...