파이토치 사용법
20548 단어 파이토치로 배우는 자연어 처리파이토치로 배우는 자연어 처리
📌 01. 파이토치의 기본 사용법
# pytorch를 사용하기 전에, torch 패키지 import
import torch
1. 텐서 만들기
# 2X3 크기의 텐서 만들기 (값을 랜덤하게)
torch.Tensor(2,3)
# 2X3 크기, 0~1 사이의 값으로 텐서 만들기 (균등 분포)
torch.rand(2,3)
# 2X3 크기의 표준 정규 분포값을 가지는 텐서 만들기
torch.randn(2,3)
# 2X3 크기, 스칼라값 0으로 채워진 텐서 만들기
torch.zeros(2,3)
# 2X3 크기, 스칼라값 1로 채워진 텐서 만들기
torch.ones(2,3)
# 2X3 크기, 0과 1 외의 특정값으로 채워진 텐서 만들기
x = torch.Tensor(2,3)
x.fill_(5)
# list로 텐서 만들기
torch.Tensor([[1,2,3], [4,5,6]])
# numpy로 텐서 만들기
# numpy의 기본 데이터 타입은 float64이므로
# 텐서로 변경했을 때 tensor의 타입은 DoubleTensor
import numpy as np
npy = np.random.rand(2,3) # 2X3 크기의 numpy 난수 생성
torch.from_numpy(npy) # numpy를 텐서로 변환
2. 텐서 타입과 크기
# 기본 텐서 타입은 FloatTensor
# 텐서 타입은 1) 초기화할 때 지정, 2) 나중에 타입캐스팅 메서드를 사용해 다른 타입으로 변경 가능
# 1) 초기화할때 지정
torch.FloatTensor([[1,2,3], [4,5,6]]) # 텐서 타입은 torch.FloatTensor
torch.LongTensor([[1,2,3], [4,5,6]]) # 텐서 타입은 torch.LongTensor
torch.tensor([[1,2,3], [4,5,6]], dtype=torch.int64) # 텐서 타입은 torch.LongTensor
# 2) 나중에 타입캐스팅 메서드를 사용해 다른 타입으로 변경
x = torch.FloatTensor([[1,2,3], [4,5,6]]) # 일 경우
x = x.long() # 텐서 타입은 torch.LongTensor
x = x.float() # 텐서 타입은 torch.FloatTensor
3. 텐서 연산
# 텐서를 더하는 방법 2가지
x = torch.randn(2,3) # 일 경우
# 1) torch.add(x+x)
# 2) x + x
# 2D 텐서에서 행은 차원0(dim=0), 열은 차원1(dim=1)로 표현
x = torch.arange(6) # 0~5까지 1씩 증가하는 텐서 생성
x = x.view(2,3) # 1X6 크기를 2X3 크기로
torch.sum(x, dim=0) # 결과값 : tensor([3., 5., 7.])
torch.sum(x, dim=1) # 결과값 : tensor([3., 12.])
torch.transpose(x,0,1) # 행과 열을 전치
4. 인덱싱 및 슬라이싱
x = torch.arange(6).view(2,3)
# 행은 1까지, 열은 2까지
x[:1, :2] # 결과값 : tensor([[0., 1.]])
# 0행 1열 값
x[0,1] # 결과값 : 1.0
# index_select 사용하기
#1)
indices = torch.LongTensor([0,2])
torch.index_select(x, dim=1, index=indices)
# 결과값 : tensor([[0., 2.], [3., 5.]])
# index_select 함수를 사용하여 x 를 적용 -> 즉, x 에서 dim=1이므로 0번째 열과 2번째 열의 값을 적용
# 2)
indices = torch.LongTensor([0,0])
torch.index_select(x, dim=0, index=indices)
# 결과값 : tensor([[0., 1., 2.], [0., 1., 2.]])
# dim=0이므로, x에서 0번째 행과 0번째 행을 적용
# 배열 인덱싱
row_indices = torch.arange(2).long() # [0,1] 값을 가지는 long 타입의 텐서 생성
col_indices = torch.LongTensor([0,1]) # [0,1] 값을 가지는 long 타입의 텐서 생성
x[row_indices, col_indices] # 결과값 : tensor([0., 4.]
# 행: [0,1], 열:[0,1] 인 상황 -> [0,0] 값과 [1,1] 값 반환
5. 텐서 연결
x = torch.arange(6).view(2,3)
#1)
torch.cat([x,x], dim=0) # 행으로 붙이기
# 결과값 : tensor([[0., 1., 2.], [3., 4., 5.], [0., 1., 2.], [3., 4., 5.]])
#2)
torch.cat([x,x], dim=1) # 열로 붙이기
# 결과값 : tensor([[0., 1., 2., 0., 1., 2.], [3., 4., 5., 3., 4., 5.]])
#3)
# cat : 주어진 차원에 텐서 연결, stack : 새로운 차원에 텐서 연결
torch.stack([x,x])
# 결과값 : tensor([[[0., 1., 2.,], [3., 4., 5.]], [[0., 1., 2.], [3., 4., 5.]]])
6. 텐서의 행렬곱
x1 = torch.arange(6).view(2,3)
x2 = torch.ones(3,2)
x2[:, 1] += 1 # 1열에 1 더하기
torch.mm(x1, x2) # x1과 x2의 행렬곱
7. 텐서와 계산그래프
# requires_grad = True : gradient를 기록하는 부가 연산을 활성화시킴
x = torch.ones(2, 2, requires_grad = True)
x.grad is None # True (gradient 존재x)
y = (x+2) * (x+5) + 3
x.grad is None # True (gradient 존재x)
z = y.mean()
z.backward() # 역방향 계산
x.grad is None # False (gradient 존재o)
# 역방향 계산은 정방향 계산에 참여한 텐서 객체에 대한 gradient 값을 계산하고, 파라미터 값을 업데이트함
# -> 그렇기 때문에 역방향 계산인 backward()를 해줬을때 gradient가 존재
Author And Source
이 문제에 관하여(파이토치 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@saiy17/파이토치의-기본-fwlgo27u저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)