john8538 님의 블로그

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

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]])

 

 

피어세션

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

 

 

회고

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