Data is ___ ?
article thumbnail
계속 업데이트 예정 ✨ 

🔎 모듈

nn.Parameter

>>> self.cls_token = nn.Parameter(torch.randn(1, latent_vec_dim))
>>> self.pos_embedding = nn.Parameter(torch.randn(1, num_patches+1, latent_vec_dim))
  • 모델을 업데이트 할 때 같이 업데이트 되는 변수
  • 사용자로부터 직접 받는 값은 아니지만 학습이 가능해야 하는 변수가 필요하다면 위와 같이 파라미터로 정의
    • ViT에서 cls_token, pos_embedding은 외부 변수가 아니지만 latent_vec_dim, num_patches를 이용해서 만들어 사용해야 한다. 

 

 

 

 

 


🔎 함수

torch.repeat( ) vs torch.expand( )

1️⃣ torch.repeat( )

>>> x = torch.tensor([1, 2, 3]) # (1, 3)
>>> x.repeat(3, 2)
"""
tensor([[ 1,  2,  3,  1,  2,  3],
        [ 1,  2,  3,  1,  2,  3],
        [ 1,  2,  3,  1,  2,  3]]) # (1*3, 3*2) = (3, 6)
"""


>>> x.repeat(4, 2, 1).size()
"""
torch.Size([4, 2, 3])
"""
  • 특정 텐서의 sizes 차원의 데이터를 반복한다.
  • repeat 안에 인자는 차원 기준(dim=0, dim=1, dim=2 ...) 반복 횟수
  • 위의 예시에서 x는 [1, 3]차원 텐서를 가진 [1, 2, 3]을 dim=0으로 4, dim=1로 2만큼 반복
    • [4, 6]의 차원이 나온다. (각각을 곱한 결과)
    • 1-D 텐서의 경우 [n]가 아니라 [1, n]으로 간주

 

 

2️⃣ torch.expand( )

>>> import torch
>>> x = torch.tensor([[1], [2], [3]]) # torch.Size([3, 1])
>>> x.expand(3, 4) # torch.Size(3, 1*4) (1이 아닌 3은 그대로 입력 !)
>>> x.expand(-1, 4) # 귀찮으면 -1 자동으로 
--------------------------------------------------------------------------------
>>> a = torch.rand(1, 1, 3) # torch.Size([1, 1, 3])
>>> b = a.expand(4, -1, -1) # torch.Size([4, 1, 3])
>>> c = a.repat(4, 1, 1) # torch.Size([1*4, 1*1, 3*1])
  • 이것 또한 텐서를 반복하지만, 1차원인 위치에서만 반복한다. 
  • 1차원인 곳에서만 주어진 숫자만큼 반복하고, 나머지는 그대로 입력해야 한다. (귀찮으면 나머지를 -1로 처리해서 자동으로 맞추기)
  • 원래 텐서의 변경을 참고한다. 

 

 

 

 

 

 


torch.matmul( )

  • Matrix 곱은 torch.matmul( ) 대신 @로 처리할 수 있다 !!!

 

 

 

 

 


torch.Softmax( )

  • torch.softmax(score, dim = 0) : output의 각 열의 합이 1
  • torch.softmax(score, dim = 1) : output의 각 행의 합이 1

 

 

 

 


torch.sum( )

  • 아무런 옵션을 주지 않으면 행렬의 모든 값을 더한 값을 출력한다. 
  • axis, dim으로 축 기준으로 더하도록 파라미터로 옵션을 줄 수 있다. 
    • axis = 0이면, column을 기준으로 더한 것인데 3차원 이상으로 가면 헷갈리므로 인덱스 0 위치의 숫자만큼 더해야 한다고 생각하면 쉽다. (첫번째 인덱스의 숫자가 2이면 2개씩 더하도록) 출력은 0의 인덱스를 제외하고 남은 숫자 만큼 행렬을 만들어서 출력한다. (즉, 2x3x4였다면 2를 제외한 3x4 모양으로 출력한다. )
    • axis = 1이면,  row를 기준으로 더한 것인데 이것 또한 3차원 이상으로 가면 헷갈리므로 인덱스 1위치의 숫자만큼 더해야 한다고 생각하면 쉽다. (두번째 인덱스의 숫자가 3이면 3개씩 더하도록) 출력은 1의 인덱스를 제외하고 남은 숫자 만큼 행렬을 만들어서 출력한다. (즉, 2x3x4였다면 3을 제외한 2x4 모양으로 출력한다. )
  • ex) 2차원  
    • dim, axis = 0 ➡ 인덱스 0을 기준으로 더한다.
      (출력은 1행 + 2행+ 3행 +...이 열의 개수만큼 나온다.)
    • dim, axis = 1 ➡ 인덱스 1을 기준으로 더한다.
      (출력은 1열 + 2열 + 3열 + ...이 행의 개수만큼 나온다. )
# matrix 생성
>>> matrix = torch.arange(4*4).view(4, 4)
"""
tesor([[0, 1, 2, 3],
	[4, 5, 6, 7],
        [8, 9, 10, 11],
        [12, 13, 14, 15]])
"""
------------------------------------------------------------------------------
# 모든 matrix 값의 합
>>> torch.sum(matrix)
"""
tensor(120)
"""
------------------------------------------------------------------------------
# 옵션 (axis, dim) 추가
>>> print(torch.sum(matrix, axis=0), torch.sum(matrix, axis=0).shape)
>>> print(torch.sum(matrix, dim=1), torch.sum(matrix, axis=1).shape)
>>> print(torch.sum(matrix, 1))
"""
tensor([24, 28, 32, 36]) torch.Size([4])
tensor([ 6, 22, 38, 54]) torch.Size([4])
tensor([ 6, 22, 38, 54])
"""

 

  • ex) 3차원
    • dim, axis = 0 ➡ 인덱스 0을 기준으로 그 숫자만큼, 즉 2개씩 더한다. 
      (출력은 인덱스 0을 제외한 크기만큼 나온다. 3x4 행렬 출력)
    • dim, axis = 1 ➡ 인덱스 1을 기준으로 그 숫자만큼, 즉 3개씩 더한다. 
      (출력은 인덱스 1을 제외한 크기만큼 나온다. 2x4 행렬 출력)
    • dim, axis = 2 ➡ 인덱스 2를 기준으로 그 숫자만큼, 즉 4개씩 더한다.
      (출력은 인덱스 2를 제외한 크기만큼 나온다. 2x3 행렬 출력)
# 2x3x4 배열 : 3x4크기의 matrix가 2개 생성
>>> x = torch.arange(2*3*4).view(2, 3, 4)
"""
tensor([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],
        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]])
"""
------------------------------------------------------------------------
>>> torch.sum(x, 0)
"""
2개씩 더한다.
3x4 행렬이 출력되도록
tensor([[12, 14, 16, 18],
        [20, 22, 24, 26],
        [28, 30, 32, 34]])
= [0,1,2,3],	      [12,13,14,15],
  [4,5,6,7],	+     [16,17,18,19], 
  [8,9,10,11],	      [20,21,22,23],	
"""
------------------------------------------------------------------------
>>> torch.sum(x, 1)
"""
3개씩 더한다.
2x4 행렬이 출력되도록
tensor([[12, 15, 18, 21],
        [48, 51, 54, 57]])
"""

 

 

 

 

'Programming > Pytorch' 카테고리의 다른 글

[Pytorch] GPU device  (0) 2023.01.28
[Pytorch] Dataset, DataLoader  (0) 2023.01.27
[Pytorch] nn.Linear( ), MLP  (0) 2023.01.20
[Pytorch] 텐서(차원) 관련 함수 정리  (0) 2023.01.18
[Pytorch] 파이토치에서 모델 출력하기  (0) 2023.01.03
profile

Data is ___ ?

@콩순이컴퓨터

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...