Ошибка при изменении тензора факела с [10,200,1] на [2000,1,1] - PullRequest
0 голосов
/ 25 мая 2018

У меня возникла проблема при попытке изменить форму тензора горелки Yp размеров [10,200,1] - [2000,1,1].Тензор получен из массива y размерности [2000,1].Я делаю следующее:

Yp = reshape(Yp, (-1,1,1))

Я пытаюсь вычесть результат к версии тензора факела y, выполнив:

Yp[0:2000,0] - torch.from_numpy(y[0:2000,0])

Я ожидаю, что результатом будет массив нулей, Но это не тот случай.Вызов различных заказов при изменении формы (order = 'F' или 'C') не решает проблему и странным образом выдает тот же результат при выполнении вычитания.Мне удается получить массив нулей только путем вызова тензора Yp метода ravel с order = 'F'.

Что я делаю не так?Я хотел бы решить эту проблему с помощью Reshape!

1 Ответ

0 голосов
/ 27 мая 2018

Я согласен с комментарием @ linamnt (хотя фактическая результирующая фигура [2000, 1, 2000]).

Вот небольшая демонстрация:

import torch
import numpy as np

# Your inputs according to question:
y = np.random.rand(2000, 1)
y = torch.from_numpy(y[0:2000,0])
Yp = torch.reshape(y, (10,200,1))

# Your reshaping according to question:
Yp = torch.reshape(Yp, (-1,1,1))
# (note: Tensor.view() may suit your need more if you don't want to copy values)

# Your subtraction:
y_diff = Yp - y
print(y_diff.shape)
# > torch.Size([2000, 1, 2000])
# As explained by @linamnt, unwanted broadcasting is done 
# since the dims of your tensors don't match

# If you give both your tensors the same shape, e.g. [2000, 1, 1] (or [2000]):
y_diff = Yp - y.view(-1, 1, 1)
print(y_diff.shape)
# > torch.Size([2000, 1, 1])

# Checking the result tensor contains only 0 (by calculing its abs. sum):
print(y_diff.abs().sum())
# > 0
...