| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- dementional reduction
- ASR
- 기초
- 정보처리기사
- 자연어처리
- TTS
- 소프트웨어 개발
- UMAP
- 객체지향
- Transformer
- CLIP
- 머신러닝
- 알고리즘
- CNN
- 데이터엔지니어
- 데이터 시각화
- 딥러닝
- SQL
- 랭그래프
- python기초
- 트랜스포머
- python 기초
- 생성형 인공지능
- 힙정렬
- 캐글
- RNN
- 에이전트
- RDBMS
- Python
- LangGraph
Archives
- Today
- Total
수달이네 기술 블로그
0. 파이토치 프레임워크(딥러닝 입문) 본문
파이토치
파이썬 기반의 오픈소스 딥러닝 프레임워크.
- AI모델을 직관적으로 만들고 학습하도록 도와줌
- 동적계산 그래프 방식 사용.
- 코드 실행 시점에 실시간으로 계산 흐름이 결정되어 디버깅, 수정이 쉬움
- GPU가속, 미분기능
- 대규모 모델도 빠르게 학습
다른 프레임워크로는 텐서플로우가 있는데, 해당 프레임워크는 문법이 일반 개발 문법과 다른 특이한 문법이었기에 파이토치의 등장으로 요즘엔 편하게 사용한다.
- 그러나 텐서플로우도 배워두는것이 좋으므로, 시간날때 공부해보기
동적 계산 그래프 방식
딥러닝 모델이 학습, 예측을 수행할 때 계산 그래프를 실행 시점에 실시간으로 생성, 수정한다.
- 즉, 지금까지 나온 연산이 어떤 과정을 거치고, 이렇게 나오게 되었는지 기억.(이로인해 역추론 가능)
- 조건문, 반복문 등 복잡한 논리구조에서 유연함
- 디버깅에 용이, 연구 및 개발속도 빠름, 직관적 코드 작성
- 계산그래프
- 입력데이터를 바탕으로 연산을 수행해 그래프 생성.
- 역전파를 통해 미분 계산 최종적으로 가중치 업데이트.
텐서(Tensor)
딥러닝 모델에서 데이터를 다룰때 사용되는 기본 데이터 구조.
- 다차원 배열
- Numpy와 비슷하나 GPU연산을 수행할 수 있다는 특징을 가짐
- 자동미분기능(Autograd)등을 제공해 딥러닝 모델의 학습을 도움
스칼라(Scalar)
단 하나의 숫자를 담는 정수형(파이토치에선 스칼라를 0차원 텐서로 표현. 즉, 텐서의 차원이 전혀 없는 상태)
tensor자료형
- 문자를 넣지 못하는 숫자를 넣는 자료형
import torch
var1 = torch.tensor(5)
print(var1) # tensor(5)
print(var1.shape) # torch.Size([])
- 위처럼 tensor자료형에 숫자 하나만 넣은 tensor자료형은 0차원 텐서로 표기된다.(스칼라)
var2 = torch.tensor([10])
print(var2) # tensor([10])
print(var2.shape) # torch.Size([1])
- 그러나 array를 넣어주면. 그 안에 숫자 하나만 들어있더라도 1차원 tensor가 된다. (스칼라 X)
var3 = torch.tensor(3)
result = var1 + var3
print(result) # tensor(8)
print(result.item()) # 8
- 스칼라는 스칼라끼리 연산이 가능하다.
- 출력이 tensor(8)로 되어있는 해당 값은 숫자로 사용하지 못한다 사용하려면 item()을 사용해야한다.
벡터(Vector)
하나 이상의 원소가 일렬로 나열된 1차원텐서(1D Tensor)를 의미한다.
var1 = torch.tensor([1, 2, 3])
print(var1) # tensor([1, 2, 3])
print(var1.shape) # torch.Size([3])
1차원 텐서를 의미한다
- torch.Size([n])에서 n은 원소의 개수를 의미
var2 = var1 + 10
print(var2) # tensor([11, 12, 13])
var3 = var1 * 2
print(var3) # tensor([2, 4, 6])
- 벡터 연산에서 스칼라를 더해주면 각 원소에 더해지고 곱해진다.
var4 = torch.tensor([1,2,3])
result = var1 + var4
result # tensor([2, 4, 6])
- 벡터끼리의 합도 마찬가지
var4 = torch.tensor([1,2,3])
result = var1 @ var4
result # tensor(14)
- @로 내적을 구해줄 수 있다.
행렬(Matrix)
2차원 형태의 텐서로 파이토치에선 shape가 (m,n)처럼 2개의 차원을 가진 텐서를 의미
var1 = torch.tensor([[1, 2, 3], [4, 5, 6]])
var2 = torch.tensor([[10, 20, 30], [40, 50, 60]])
print(var1) # tensor([[1, 2, 3],
# [4, 5, 6]])
print(var1.shape) # torch.Size([2, 3])
- 2차원 배열로 이루어진 것을 알 수 있다.
- torch.Size([n,m])에서 n은 행 개수를 m은 열 개수를 의미한다.
print(var1 + var2) # tensor([[11, 22, 33],
# [44, 55, 66]])
print(var1 * var2) # tensor([[ 10, 40, 90],
# [160, 250, 360]])
- 위와 같이 행렬 합, 곱이 가능하다(곱의 경우 각 요소끼리 곱 행렬곱은 mm)
var3 = torch.tensor([[1,2],[2,4], [3,4,]])
print(torch.mm(var1, var3)) # tensor([[ 20, 40],
# [ 56, 112]])
print(var1 @ var3) # tensor([[ 20, 40],
# [ 56, 112]])
- torch.mm메서드로 행렬 곱 연산을 할 수 있다.
- 연산자로는 @를 사용한다.(벡터의 내적)
다차원 텐서(Multi-dimensinal Tensor)
여러 축을 가지는 텐서를 의미(3차원 이상)
- 이미지, 음성, 동영상, 시계열 데이터등의 데이터를 표현
- 이미지 : 이미지 n*n *3(RGB)등등
var1 = torch.tensor([
[[1, 2],[3, 4]],
[[5, 6],[7, 8]]
])
var2 = torch.tensor([
[[10, 20],[30, 40]],
[[50, 60],[70, 80]]
])
print(var1) # tensor([[[1, 2],
# [3, 4]],
#
# [[5, 6],
# [7, 8]]])
print(var1.shape) # torch.Size([2, 2, 2])
- torch.Size([x,y,z]): x = y,z의 행렬이 2개, y = 행이 2개, z = 열이 2개
텐서의 활용
data = [
[1,2],
[3,4]
]
t1 = torch.tensor(data)
print(t1) # tensor([[1, 2],
# [3, 4]])
- 위와 같이 배열을 텐서로 만들어 줄 수 있다.
t1 = torch.tensor([5])
t2 = torch.tensor([10])
ndarr1 = (t1 + t2).numpy()
print(ndarr1) # [15]
print(type(ndarr1)) # <class 'numpy.ndarray'>
- 텐서형을 ndarray로 형태로 바꿔줄 수도 있다.
result = ndarr1 * 10
t3 = torch.from_numpy(result)
print(t3) # tensor([150])
print(type(t3)) # <class 'torch.Tensor'>
- ndarray를 tensor형으로 바꿔줄수도 있다.
- 텐서의 인덱싱 방식은 다른 array와 같다.
t1 = torch.tensor([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
])
print(t1[0]) # tensor([1, 2, 3, 4])
print(t1[:, 0]) # tensor([1, 5, 9])
print(t1[:, -1]) # tensor([ 4, 8, 12])
print(t1[..., 2]) # tensor([ 3, 7, 11])
'AI공부 > 딥러닝' 카테고리의 다른 글
| 4. 손글씨 숫자 데이터셋 처리 (0) | 2026.01.30 |
|---|---|
| 3. 파이토치 논리회귀(단항, 다중 논리회귀) (0) | 2026.01.29 |
| 2. 다중선형회귀 (0) | 2026.01.28 |
| 1. 단순 선형 회귀(손실함수, 최적화, 경사하강법, 학습률) (0) | 2026.01.27 |
| 딥러닝. Alexnet (0) | 2026.01.15 |