Мне трудно понять разницу между следующим: x1 = torch.tensor ([1, 2, 3]) # одиночные скобки x2 = torch.tensor ([[1, 2, 3]]]) # двойные скобки При проверке их размеры: ...

0
Omar AlSuwaidi 13 Дек 2020 в 10:40

1 ответ

Лучший ответ

Согласно официальной документации -

Ожидает, что на входе будет <= 2-D тензор, и меняет местами измерения 0 и 1. 0-D и 1-D тензоры возвращаются как есть. Когда ввод - это двумерный тензор, это эквивалентно транспонированию (ввод, 0, 1).

x = torch.randn(())
torch.t(x)
#tensor(0.1995)

x = torch.randn(3)
x
#tensor([ 2.4320, -0.4608,  0.7702])

torch.t(x)
#tensor([ 2.4320, -0.4608,  0.7702])

x = torch.randn(2, 3)
x
#tensor([[ 0.4875,  0.9158, -0.5872],
#        [ 0.3938, -0.6929,  0.6932]])

torch.t(x)
#tensor([[ 0.4875,  0.3938],
#        [ 0.9158, -0.6929],
#        [-0.5872,  0.6932]])

По этой причине x1 не действует. В настоящее время это одномерный тензор, а НЕ двумерный тензор. Есть разница между формой (3,) и (3,1). Первый имеет только одну ось, а другой - 2 оси (аналогично добавленным вами двойным скобкам).

Это утверждение Which I interpret as x1 being a (3x1) column vector, while x2 is a (1x3) row vector. в некоторой степени неверно.

x1 #(3,) 1D tensor
x1.reshape((3,1) #(3,1) #2D tensor

x1.T #(1,3) 2D tensor with successful transpose
1
Akshay Sehgal 13 Дек 2020 в 08:02