이상한 파이토치1: torch.triu, torch.tril

ddang ddang ball·2022년 9월 2일
2

파이토치

목록 보기
1/6
post-thumbnail

파이토치를 배울때 기본 명령어 몇개만 회상해보자

a = torch.ones(3,3)
print(a)

b = torch.zeros(3,3)
print(b)

이렇게 하면 뭐가 나올지 알것이다.

위같은 경우
1. 1. 1.
1. 1. 1.
1. 1. 1.

아래는
0. 0. 0.
0. 0. 0.
0. 0. 0.

그런데...
만약에 위에 2개를 합칠 수 있다면 믿을 것인가??

그래서 소개한다
바로 torch.triu!!!

torch.triu(상삼각)

+2022.09.15일
torch.triu는 선형 대수학에서 '삼각행렬'에서 나왔다.

대각선을 포함한 위의 값은 존재하고 아래 값이 0이면 상삼각행렬!


대각선을 포함한 아래 값은 존재하고 위 값이 0이면 하삼각행렬!

사진 출처) https://rfriend.tistory.com/141

torch.triu(텐서를 넣으시오.)

torch.triu는 텐서를 입력으로 받는다.
그러면 3*3의 반반 행렬이 나타난다!
대각선을 기준으로 반은 살고 반은 0이 된다!

a = torch.ones(3,3)
b = torch.triu(a)
print(b)

이렇게 나온다! 반은 살고 반은 죽는 신기한 텐서가 나온다!

어디에 쓰일까? 트랜스포머 마스크에 사용된다!
트랜스포머는 한번에 보기 때문에 뒤의 값을 가려야 한다. (정답까지 훑어볼 수 있다!)
그래서 과거부터 현재 보는 값까지는 1, 뒤에는 0을 넣어야 한다!

torch.triu(torch.ones(4, 4))


먼저 ones를 크기에 맞게 생성한다.

이걸 원하는 형태로 바꾸기 위해 transpose를 사용한다!

torch.triu(torch.ones(4, 4)).transpose(0, 1) #행과 열의 위치를 바꾸는 함수

transpose는 2행1열 --> 1행2열로, 3행1열 --> 1행3열 이런식으로 바꾼다!(1행1열, 2행2열은 당연히 안바뀐다!)


이런식으로 완성된다!

+2022.11.11

torch.tril(하삼각)

하삼각행렬을 만들고 싶으면
torch.tril이 있다!!

torch.triu(upper 상삼각형)

torch.tril(lower 하삼각형)

torch.triu(tensor, diagonal)?

diagonal = 1/-1 선택을 통해 삼각행렬에서 대각행렬을 살릴지(diagonal = 1), 그냥 0으로 죽일지(diagonal = -1) 결정할 수 있다.

profile
배우고 싶은것은 많으나 용두사미인 사람.

0개의 댓글