AI/Naver_Boostcamp AI Tech

네부캠 AI tech 2일차 학습정리(Pytorch의 Tensor)

john8538 2024. 8. 6. 20:41

목차

    강의

    Pytorch 3강 & 4강 수강

     

    파이토치에서의 Tensor를 생성하고 다루는 방법의 기초에 대해 수강하였다.

     

    강의 내용과 실습내용을 전부 타이핑해보며 손에 익히는 시간을 지녔으며, 추가로 궁금한 부분에 있어 따로 블로깅 하였다.

     

    간단하게 요약해보자

     

    3강

    # 특정 값으로 초기화된 텐서 생성

    • torch.zeros() : 0으로 초기화
    • torch.ones(): 1로 초기화

    # 난수로 값으로 초기화된 텐서 생성

     

    • torch.rand(): [0, 1] 구간의 연속균등분포 난수
    • torch.randn(): 표준정규분포 난수

    # 특정 값으로 초기화된 텐서 변환

     

    • torch.zeros_like(): 크기와 자료형이 같은 0으로 초기화된 텐서로 변환
    • torch.ones_like(): 크기와 자료형이 같은 1로 초기화된 텐서로 변환

    # 난수로 초기화된 텐서로 변환

    • torch.rand_like(): 크기와 자료형이 같은 [0,1] 구간의 연속균등분포 난수 텐서로 변환
    • torch.randn_like(): 크기와 자료형이 같은 표준정규분포 난수 텐서로 변환

    # 지정된 범위 내에서 초기화된 텐서 생성

    • torch.arange(start,end,step) : 매개변수를 생략해도됨

    # 초기화되지 않은 텐서 생성

    • torch.empty()

    # 초기화되지 않은 텐서 수정

    • fill_(): 초기화되지 않은 텐서에 특정 값을 채우는 방법

    # CPU , GPU 에서의 텐서 활용

    https://john8538.tistory.com/8  조금더 자세하게 블로깅을 진행했으므로 참고해주세용!!

     

     

    4강

    PyTorch Tensor 조작의 기초: 모양 변경과 인덱싱

    PyTorch는 딥러닝을 위한 강력한 라이브러리이며, 그 핵심에는 Tensor가 있습니다. Tensor를 효과적으로 다루는 것은 PyTorch를 마스터하는 첫 걸음입니다. 이번 포스트에서는 Tensor의 기본적인 조작 방법에 대해 알아보겠습니다.

     

    1. Tensor의 인덱싱과 슬라이싱

    Temsor의 특정 요소에 접근할 수 있으며 일부를 추출하여 데이터 처리를 진행할 수 있습니다. 예제 코드는 아래와 같습니다.

    a = torch.tensor([10, 20, 30, 40, 50, 60])
    print(a[0])     # 출력: tensor(10)
    print(a[1:4])   # 출력: tensor([20, 30, 40])

     

    1차원 Tensor 에서 다차원 Tensor까지 각각 선언하고 슬라이싱을 진행할 수 있습니다.

     

    2. Tensor의 모양 변경

    2-1. view(): Tensor의 모양을 변경할 수 있는 가장 기본적인 방법 (메모리가 연속적이여야 한다!!)

    b = torch.arange(12)
    c = b.view(4, 3)
    print(b)
    print(c)
    
    # 출력:
    # tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    
    # 출력:
    # tensor([[ 0,  1,  2],
    #         [ 3,  4,  5],
    #         [ 6,  7,  8],
    #         [ 9, 10, 11]])

     

    2-2. flatten(): Tensor를 1차원으로 평탄화합니다.

    d = torch.randn(3, 3)
    e = torch.flatten(d)
    print(d)  # 표준 정규분포로 생성된 3x3 출력
    print(e)  # 1차원 Tensor 출력
    
    # 출력 
    # tensor([[ 0.2708,  0.0705, -0.6536],
    #        [ 0.9966, -1.2883, -0.6392],
    #        [ 1.3762, -0.9550, -0.5688]])
    # tensor([ 0.2708,  0.0705, -0.6536,  0.9966, -1.2883, -0.6392,  1.3762, -0.9550,
    #        -0.5688])

     

     

     

    2-3. reshape(): view()와 유사하나 메모리가 연속성과 관계없이 사용할 수 있다.

    f = torch.tensor([0,4,55,2,2,3])
    g = f.reshape(3, 2)
    
    print(f)
    print(g)
    
    # 출력:
    # tensor([ 0,  4, 55,  2,  2,  3])
    #
    # tensor([[ 0,  4],
    #        [55,  2],
    #        [ 2,  3]])

     

    3. Tensor의 차원조작

    3-1. transpose(): Tensor의 모양을 전치로 변경한다. 선형대수에서 배웠던 전치행렬과 동일한 메소드다. 텐서의 행과 열을 변경한다.

    h = torch.tensor([[0, 1, 2], [3, 4, 5]])
    i = h.transpose(0, 1)
    
    print(h)
    print(i)
    
    # 출력:
    # tensor([[0, 1, 2],
    #        [3, 4, 5]])
    #        
    # tensor([[0, 3],
    #         [1, 4],
    #         [2, 5]])

     

    3-2.squeeze(): 크기가 1인 dimension을 제거한다.

    j = torch.randn(1, 3, 4)
    k = torch.squeeze(j)
    
    print(k.shape)  # 출력: torch.Size([3, 4])

     

    3-3.unsqueeze(): 새로운 차원을 추가한다.

    l = torch.randn(3, 4)
    m = torch.unsqueeze(l, dim=0)   # dim = 0은 0차원앞에 새로운 차원을 추가하라는 의미
    
    print(m.shape)  # 출력: torch.Size([1, 3, 4])

     

    4. Tensor의 결합

    4-1.stack(): 여러 Tensor를 겹합하여 새로운 차원을 만듭니다.

    n = torch.tensor([1, 2, 3])
    o = torch.tensor([4, 5, 6])
    p = torch.stack((n, o))
    print(p)
    # 출력:
    # tensor([[1, 2, 3],
    #         [4, 5, 6]])

     

     

    피어세션

    각 강의 별로 배웠던 내용 공유 및 추가적 공부에 대한 발표 진행 & 추후 업데이트 예정

     

     

    회고

    여러 일이 겹친날이라 힘들었다 ㅠ