1. Clusters(클러스터)
- Tensorflow와 함께 머신러닝, 딥러닝에서 가장 널리 사용되는 프레임워크
- 초기에는 Torch라는 이름으로 Lua언어 기반으로 만들어졌으나, 파이썬 기반으로 변경한 것이 Pytorch
- 뉴욕대학교와 페이스북(메타)이 공동으로 개발하였고, 현재 가장 대중적인 머신러닝, 딥러닝 프레임워크
import torch
- 파이토치를 이용하고자 할때는 위와같이 import를 해주면 됩니다
import torch
print(torch.__version__)
1-1. 스칼라(Scalar)
- 하나의 상수를 의미 (데이터가 하나만 들어가 있는 경우)
var1 = torch.tensor([1])
var1
type(var1)
var2 = torch.tensor([10.5])
var2
# 두 스칼라의 사칙 연산
print(var1 + var2)
print(var1 - var2)
print(var1 * var2)
print(var1 / var2)
1-2. 벡터(Vector)
- 상수가 두 개 이상 나열된 경우
vec1 = torch.tensor([1,2,3])
vec1
vec2 = torch.tensor([1.5,2.4,3.3])
vec2
# 두 벡터의 사칙연산
print(vec1 + vec2)
print(vec1 - vec2)
print(vec1 * vec2)
print(vec1 / vec2)
vec3 = torch.tensor([5, 10, 15, 20])
vec3
vec1 + vec3
# RuntimeError: The size of tensor a (3) must match the size of tensor b (4) at non-singleton dimension 0
1-3. 행렬(Matrix)
- 2개 이상의 벡터 값을 가지고 만들어진 값으로 행과 열의 개념을 가진 숫자의 나열
matrix1 = torch.tensor([[1, 2], [3, 4]])
print(matrix1)
matrix2 = torch.tensor([[7, 8], [9, 10]])
print(matrix2)
# 두 행렬의 사칙 연산
print(matrix1 + matrix2)
print(matrix1 - matrix2)
print(matrix1 * matrix2)
print(matrix1 / matrix2)
1-4. 텐서(Tensor)
- 다수의 행렬이 모이면 텐서라고 부름
- 배열이나 행렬과 매우 유사한 특수 자료구조
- 파이토치는 텐서를 사용하여 모델의 입력과 출력, 모델의 매개변수들을 처리 사용됨
from IPython.display import Image
Image(url='https://miro.medium.com/max/875/1*jRyyMAhS_NZxqyv3EoLCvg.png')
tensor1 = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(tensor1)
tensor2 = torch.tensor([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])
print(tensor2)
print(tensor1 + tensor2)
print(tensor1 - tensor2)
print(tensor1 * tensor2)
print(tensor1 / tensor2)
print(torch.add(tensor1, tensor2))
print('----------------------------')
print(torch.subtract(tensor1, tensor2))
print('----------------------------')
print(torch.multiply(tensor1, tensor2))
print('----------------------------')
print(torch.divide(tensor1, tensor2))
print('----------------------------')
print(torch.matmul(tensor1, tensor2)) # 행렬곱
# tensor1에 결과를 다시 저장, 모든 사칙연산자에 _를 붙이면 inplace가 됨
print(tensor1.add_(tensor2))
print(tensor1)
2. 텐서의 변환
data = [[1,2],[3,4]]
x_data = torch.tensor(data)
import numpy as np
np_array = np.array(data)
np_array
x_np_1 = torch.tensor(np_array)
x_np_1
x_np_1[0, 0] = 100
print(x_np_1)
print(np_array)
# as_tensor : ndarray와 동일한 메모리 주소를 가리키는 뷰를 만듦
# as_tensor는 다양한 자료구조가 들어와도 상관없음
x_np_2 = torch.as_tensor(np_array)
print(x_np_2)
x_np_2[0, 0] = 200
print(x_np_2)
print(np_array)
# from_numpy(): ndarray와 동일한 메모리 주소를 가리키는 뷰를 만듦
x_np_3 = torch.from_numpy(np_array)
print(x_np_3)
x_np_3[0, 1] = 400
print(x_np_3)
print(np_array)
np_again = x_np_3.numpy()
print(np_again, type(np_again))
3. 파이토치 주요 함수
# 입력한 행렬의 구조를 1로 채움
a = torch.ones(2, 3)
print(a)
# 입력한 행렬의 구조를 0으로 채움
b = torch.zeros(2, 3)
print(b)
# 입력한 행렬의 구조를 정해준숫자(10)으로 채움
c = torch.full((2, 3), 10)
print(c)
# 입력한 행렬의 구조를 임의의 수로 채움
d = torch.empty(2, 3)
print(d)
# 입력한 숫자(5) * 입력한 숫자(5) 의 행렬을 만들어 0으로 채우고 행의 순서의 위치에만 1을 채움
e = torch.eye(5)
print(e)
# 입력한 숫자(10)의 길이만큼 숫자를 나열(0부터 시작)
f = torch.arange(10)
print(f)
# 입력한 행렬의 구조를 랜덤의 숫자로 채움(양수로만)
g = torch.rand(2, 3)
print(g)
# 입력한 행렬의 구조를 랜덤의 숫자로 채움 (음수도 포함)
h = torch.randn(2, 3)
print(h)
# 첫번째 숫자는 메트릭스, 뒤의 두 숫자는 행렬
i = torch.arange(16).reshape(2, 2, 4)
print(i, i.shape)
# permute(): 차원을 지정한 인덱스로 변경
# i = (2, 2, 4)
j = i.permute((2, 0, 1)) # 2, 2, 4 -> 4, 2, 2
print(j, j.shape)
4. 텐서의 인덱싱과 슬라이싱
a = torch.arange(1,13).reshape(3,4)
print(a)
print('----------------------------')
print(a[1])
print('----------------------------')
print(a[0,-1])
print('----------------------------')
print(a[1:-1])
print('----------------------------')
print(a[:2,2:])
5. 코랩의 GPU 사용하기
- 코랩에서 device 변경하는 방법
- 상단메뉴 -> 런타임 -> 런타임 유형변경 -> 하드웨어 가속기를 GPU로 변경 -> 저장 ->세션 다시 시작 및 모두 실행
tensor = torch.rand(3,4)
print(tensor)
print(f'shape:{tensor.shape}')
print(f'type:{type(tensor)}')
print(f'dtype:{tensor.dtype}')
print(f'device:{tensor.device}')
# is_available(): gpu를 사용할 수 있는지 여부
tensor = tensor.reshape(4, 3)
tensor = tensor.int()
print(f'shape: {tensor.shape}')
print(f'type:{type(tensor)}')
print(f'type: {tensor.dtype}')
if torch.cuda.is_available():
print('GPU를 사용할 수 있음')
tensor = tensor.to('cuda')
print(f'device: {tensor.device}')
'머신러닝 & 딥러닝' 카테고리의 다른 글
15. 파이토치로 구현한 논리회귀 (0) | 2024.06.13 |
---|---|
14. 파이토치로 구현한 선형회귀 (0) | 2024.06.13 |
12. KMeans (0) | 2024.06.13 |
11. 다양한 모델 적용 (0) | 2024.06.13 |
10. lightGBM (0) | 2024.06.13 |