머신러닝&딥러닝/이론
[머신러닝&딥러닝] 파이토치(PyTorch) 기초 요소
거북이07
2024. 1. 8. 17:01
파이토치(PyTorch)
파이토치(PyTorch)는 파이썬 기반의 오픈 소스 머신러닝 라이브러리로 페이스북 인공지능 연구집단에 의해 개발되었다. 간결하고 구현이 빠르며 텐서플로우보다 사용자가 익히기 훨씬 쉽다는 특징이 있다.
파이토치의 장점
- 설치가 간편하다
- 이해와 디버깅이 쉬운 직관적이고 간결한 코드로 구성되어있다.
- 다양한 모델 구축이 가능하다.
- 동적 계산 그래프
파이토치의 기초 요소
스칼라(Scalar)
스칼라(scalar)는 우리가 흔히 수학에서 부르는 상수값이라고 보면 된다.
💻 코드
var1 = torch.tensor([1])
print(var1) # 값 출력
✔결과
tensor([1])
벡터(Vector)
벡터(vector)는 수학 개념으로 크기와 방향을 갖는 물리량을 의미한다. 상수가 두개 이상 나열된 경우
💻 코드
vec1 = torch.tensor([1, 2, 3])
print(vec1)
✔결과
tensor([1, 2, 3])
행렬(Matrix)
행렬(Matrix)은 2개 이상의 백터 값을 가지고 만들어진 값으로, 행과 열의 개념을 가진 숫자의 나열이다.
💻 코드
mat1 = torch.tensor([[1,2], [3,4]])
print(mat1)
✔결과
tensor([[1, 2],
[3, 4]])
텐서(Tensor)
텐서(Tensor)는 다수의 행렬이 모인것이다. 배열이나 행렬과 매우 유사한 특수 자료구조이며 파이토치는 텐서를 사용하여 모델의 입력과 출력, 모델의 매개변수들을 처리한다.
💻 코드
tensor1 = torch.tensor([[[1,2],[3,4]], [[5,6],[7,8]]])
print(tensor1)
✔결과
tensor([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
스칼라, 벡터, 행렬, 텐서는 기본 사칙연산(+, -, *, /)을 사용할 수 있다.
print(요소 + 요소) #tensor([11.5000])
print(요소 - 요소) #tensor([-9.5000])
print(요소 * 요소) #tensor([10.5000])
print(요소 / 요소) #tensor([0.0952])
.add_()
모든 사칙연산자에 _ 를붙이면 inplace가 된다.
💻 코드
print(tensor1.add_(tensor2)) # 인플레이스
print(tensor1)
텐서(Tensor)의 변환
data = [[1,2], [3, 4]]
print(data)
print(type(data))
[[1, 2], [3, 4]]
<class 'list'>
1. 리스트를 텐서로 변환
torch.tensor() 함수를 사용.
💻 코드
x_data = torch.tensor(data)
print(x_data)
tensor([[1, 2],
[3, 4]])
2. ndarray를 텐서로 변환
ndarray를 텐서로 변환하는 방법은 여러가지가 있다.
💻 코드
np_array = np.array(x_data) # ndarray변수 생성
np_array
# 방법1 torch.tensor() 함수를 이용하여 변경
x_np_1 = torch.tensor(np_array)
x_np_1
# 방법2 torch.as_tensor() 함수를 이용하여 변경
# 해당 함수는 여러가지 자료구조가 들어갈 수 있다.
# as_tensor()함수는 ndarray와 동일한 메모리 주소를 가리키는 뷰를 만든다.
x_np_2 = torch.as_tensor(np_array)
print(x_np_2) # [1,2], [3,4] 출력
x_np_2[0, 0] = 200 # x_np_2[0,0]에 200을 대입
print(x_np_2) # [0,0] 해당 위치에 값이 200으로 변경되어있음.
print(np_array) # 동일한 메모리 주로를 가리키기때문에 원본도 변형되어있음.
# 방법3 torch.from_numpy() 함수를 이용하여 변경
# ndarray만 들어가야한다.
# as_tensor과 마찬가지로 원본 자료도 변형된다.
x_np_3 = torch.from_numpy(np_array)
print(x_np_3)
x_np_3[0,0] = 300
print(x_np_3)
print(np_array)
2. 텐서를 ndarray로 변환
np_again = x_np_1.numpy()
print(np_again, type(np_again)) # [[100,2][3,4]] <class 'numpy.ndarray'>