Я прошу прощения, если этот вопрос уже задавался, однако я очень смущен сжатием и расстегиванием pytorch. Я пытался просмотреть документы и другие вопросы, связанные со стековым потоком, но я все еще не уверен, что он на самом деле делает. Я посмотрел на Что такое "unqueeze" в Pytorch? , но я до сих пор не понимаю.
Я пытался понять это, исследуя это сам в python. Сначала я создал случайный тензор с
x = torch.rand(3,2,dtype=torch.float)
>>> x
tensor([[0.3703, 0.9588],
[0.8064, 0.9716],
[0.9585, 0.7860]])
Но независимо от того, как я сжимаю его, я получаю те же результаты:
>>> x.squeeze(0)
tensor([[0.3703, 0.9588],
[0.8064, 0.9716],
[0.9585, 0.7860]])
>>> x.squeeze(1)
tensor([[0.3703, 0.9588],
[0.8064, 0.9716],
[0.9585, 0.7860]])
>>> x.squeeze(-1)
tensor([[0.3703, 0.9588],
[0.8064, 0.9716],
[0.9585, 0.7860]])
Если я сейчас пытаюсь отжать, я получаю далее,
>>> x.unsqueeze(1)
tensor([[[0.3703, 0.9588]],
[[0.8064, 0.9716]],
[[0.9585, 0.7860]]])
>>> x.unsqueeze(0)
tensor([[[0.3703, 0.9588],
[0.8064, 0.9716],
[0.9585, 0.7860]]])
>>> x.unsqueeze(-1)
tensor([[[0.3703],
[0.9588]],
[[0.8064],
[0.9716]],
[[0.9585],
[0.7860]]])
Однако, если я сейчас создаю тензор x = torch.tensor([1,2,3,4])
и пытаюсь отжать его, то получается, что 1
и -1
превращают его в столбец, где при 0
остается То же самое.
x.unsqueeze(0)
tensor([[1, 2, 3, 4]])
>>> x.unsqueeze(1)
tensor([[1],
[2],
[3],
[4]])
>>> x.unsqueeze(-1)
tensor([[1],
[2],
[3],
[4]])
Может ли кто-нибудь дать объяснение того, что сжатие и отжимание делают с тензором? И в чем разница между аргументами 0
, 1
и -1
?