PyTorch에서view의 사용법 설명 기반

2826 단어 PyTorchview
numpy에서resize () 의 기능과 같지만 사용법이 다를 수 있습니다.

내 이해는:


원래tensor의 데이터를 줄 우선순위에 따라 1차원 데이터로 배열하고 (여기는 주소가 연속적으로 저장되어야 하기 때문일 것이다) 매개 변수에 따라 다른 차원의tensor로 조합한다.
예를 들어 네가 원래의 데이터가 [[1,2,3], [4,5,6]이든 [1,2,3,4,5,6]이든 1차원 벡터로 배열된 것은 모두 6개의 원소이기 때문에view 뒤의 매개 변수가 일치하면 얻은 결과는 모두 같다.
예를 들면,

a=torch.Tensor([[[1,2,3],[4,5,6]]])
b=torch.Tensor([1,2,3,4,5,6])
print(a.view(1,6))
print(b.view(1,6))
얻은 결과는 모두

tensor([[1., 2., 3., 4., 5., 6.]]) 

다시 한 번 예를 들자.


a=torch.Tensor([[[1,2,3],[4,5,6]]])
print(a.view(3,2))
획득:

tensor([[1., 2.],
    [3., 4.],
    [5., 6.]])
1, 2, 3, 4, 5, 6 순서의 수조로 필요한 모양을 채우는 셈이다.하지만 다음과 같은 결과를 얻으려면 다음과 같이 하십시오.

tensor([[1., 4.],
    [2., 5.],
    [3., 6.]])
다른 함수를 사용해야 합니다:permute ().내 또 다른 블로그를 참조하십시오:PyTorch에서 permute 사용법
또한 매개변수는 비워둘 수 없습니다.매개 변수 중의 -1은 이 위치를 다른 위치의 숫자로 추정하는 것을 대표한다. 다른 뜻을 가지지 않는 상황에서view 매개 변수는 추정할 수 있다. 즉, 사람이 모양을 추정할 수 있는 상황에서view 함수도 추정할 수 있다.
예를 들어 atensor의 데이터 개수는 6개이고view(1,-1)이면 우리는tensor의 원소 개수에 따라 -1이 6을 대표한다고 추정할 수 있다.
만약view(-1,-1,2)라면 사람은 어떻게 추정해야 할지 모르고 기계도 모른다.
또 다른 상황은 사람이 추정할 수 있지만 기계가 추정할 수 없는 경우:view(-1,-1,6), 사람이 알 수 있는 -1은 모두 1을 대표하지만 기계는 두 개의 마이너스 1을 동시에 허용하지 않는다.
만약 -1이 없다면, 모든 매개 변수의 곱셈은tensor의 원소의 총 개수와 일치해야 한다. 그렇지 않으면 오류가 발생할 것이다.
추가:pytorch에서 x.view () 와permute 사용

pytorch에서 x.view() 사용법


pytorch에서 x.view () 를 자주 볼 수 있습니다. 이것은 Tensor의 차원을view가 지정한 차원으로 바꾸는 것을 나타냅니다. 이것은 resize 함수와 유사합니다.

b=torch.Tensor([[[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]]]])
print(b.size())
(1, 2, 3, 3)
print(b.view(b.size(0),-1))
tensor([[1., 2., 3., 4., 5., 6., 7., 8., 9., 1., 2., 3., 4., 5., 6., 7., 8., 9.]])
print(b.view(b.size(0),-1).size())
(1, 18)
b.size(0)는 b중 0차원==1,-1은 원 데이터에 따라 자동으로 분배되는 열수를 나타낸다.

a=torch.Tensor([[[1,2,3],[4,5,6]]])
print(a.size())
(1, 2, 3)
print(a.view(6,-1))
tensor([[1.],
[2.],
[3.],
[4.],
[5.],
[6.]])
print(a.view(6,-1).size())
(6, 1)
a를 6행 1열로 변환

print(a.view(-1,6).size())
(1, 6)
또는 a를 1행 6열로 변환
프로그램에서view 함수 뒤에permute () 함수를 따라가는 것을 자주 볼 수 있습니다. 이 함수는 차원 변환을 하는 것입니다

print(a.view(-1,6).permute(1,0))
tensor([[1.],
[2.],
[3.],
[4.],
[5.],
[6.]])
print(a.view(-1,6).permute(1,0).size())
(6, 1)
퍼뮤트를 넣으면 a는 (1,6)에서 (6,1)로 변한다.
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.

좋은 웹페이지 즐겨찾기