일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 실버
- 15649
- 그리디 알고리즘
- 파이싼
- 신경망 학습
- 1101
- BOJ
- 1002
- n과 m
- 설정
- pyenv
- Mac
- Python
- 백트래킹
- 재귀
- 9020
- 백준
- 개발환경
- 파이썬
- end to end
- 기계학습
- N-Queen
- streamlit
- 4948
- 가상환경
- 밑바닥부터 시작하는 딥러닝
- 손실함수
- 경사하강법
- Today
- Total
파이톨치
[부스트캠프] 인공지능 기초 다지기 - 딥러닝 - PyTorch 본문
딥러닝
딥러닝은 인공신경망(artificial neural networks)을 기반으로 한 머신러닝의 한 분야로, 데이터에서 패턴을 학습하여 의미 있는 정보를 추출하거나 예측하는 기술입니다. 이 기술은 특히 복잡한 데이터 구조나 대규모 데이터셋에서 뛰어난 성능을 발휘합니다.
딥러닝의 핵심은 이러한 인공신경망을 훈련시키는 과정입니다. 데이터와 해당 데이터의 정답을 기반으로 네트워크의 가중치를 최적화하며 학습합니다. 이 과정에서 역전파(backpropagation) 알고리즘이 사용되어 네트워크의 오차를 줄이기 위해 각 층의 가중치를 조정합니다.
딥러닝 프레임워크
딥러닝 프레임워크는 딥러닝 모델을 구축하고 훈련시키기 위한 도구들의 집합을 말합니다. 각 프레임워크마다 특성과 장단점이 있으며, 주요한 몇 가지를 소개해 드리겠습니다:
- TensorFlow: 구글에서 개발한 가장 인기 있는 딥러닝 프레임워크 중 하나입니다. 그래프 기반의 계산을 통해 유연하고 확장 가능한 모델을 구축할 수 있습니다. TensorFlow 2.x 버전에서는 즉시 실행(eager execution)을 지원하여 코드 작성과 디버깅을 쉽게 만들었습니다.
- PyTorch: Facebook에서 개발한 또 다른 인기 있는 프레임워크입니다. 동적 계산 그래프를 사용하여 직관적인 코드 작성과 디버깅을 가능하게 합니다. 특히 연구 목적으로 많이 사용되며, 커뮤니티가 활발합니다.
- Keras: TensorFlow, Theano, Microsoft Cognitive Toolkit 등 여러 백엔드 엔진 위에서 동작하는 고수준 딥러닝 API입니다. 쉬운 사용성과 직관적인 인터페이스를 제공하여 빠르게 모델을 프로토타입하고 실험할 수 있습니다.
- MXNet: 아마존 웹 서비스에서 지원하는 오픈 소스 딥러닝 프레임워크로, 확장성이 좋고 빠른 속도를 자랑합니다. Gluon이라는 새로운 인터페이스를 통해 쉬운 모델 작성을 지원합니다.
- Caffe: 버클리 대학에서 개발한 딥러닝 프레임워크로, CNN (Convolutional Neural Networks)을 주로 지원합니다. 일부 고성능 애플리케이션에서 여전히 널리 사용됩니다.
딥러닝 프레임워크는 사용자가 딥러닝 모델을 구축하고 학습하는 과정에서 발생하는 많은 복잡한 작업들을 자동화하여 제공합니다. 이러한 작업에는 모델의 구조 설계, 미분값 계산, 학습 알고리즘 구현, 최적화(optimizer) 및 손실 함수(loss function) 선택 등이 포함됩니다.
딥러닝 모델의 학습 과정에서는 역전파 알고리즘을 사용하여 각 층의 가중치와 편향을 업데이트합니다.
이 과정에서 필요한 미분값(gradient)을 계산해야 합니다.
딥러닝 프레임워크는 이러한 미분값 계산을 자동으로 처리하여 사용자가 직접 구현할 필요가 없게 합니다.
따라서, 딥러닝 프레임워크는 이러한 여러 기능들을 자동으로 처리하여 사용자가 모델의 구조를 설계하고 학습하는 과정에서 더욱 효율적이고 직관적으로 작업할 수 있게 도와줍니다.
PyTorch
PyTorch에서는 다차원 텐서의 형태를 조정하기 위해 flatten, view, reshape 등의 메서드를 제공합니다.
이들은 텐서의 모양을 변경하거나 평탄화하는 작업에 사용됩니다.
flatten()
flatten() 메서드는 다차원 텐서를 1차원으로 평탄화합니다.
import torch
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
flattened = x.flatten()
print(flattened) # tensor([1, 2, 3, 4, 5, 6])
view()
view() 메서드는 텐서의 모양을 변경합니다. 새로운 모양의 요소 수는 원래 텐서와 동일해야 합니다.
view() 메서드는 새로운 텐서를 생성하지 않고, 기존 텐서의 메모리를 재구성하여 새로운 모양을 가진 뷰를 반환합니다.
즉, 값 변경시 동일하게 변경됩니다.
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
reshaped = x.view(3, 2)
print(reshaped)
# tensor([[1, 2],
# [3, 4],
# [5, 6]])
reshape()
reshape() 메서드도 view()와 유사하게 텐서의 모양을 변경합니다.
reshape() 메서드도 텐서의 모양을 변경하지만, view와 달리 메모리 레이아웃이 연속적이지 않아도 사용할 수 있습니다.
reshape()은 일반적으로 view()보다 더 많은 상황에서 사용할 수 있지만, 메모리 레이아웃이 연속적이지 않은 경우 예외가 발생할 수 있습니다.
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
reshaped = x.reshape(3, 2)
print(reshaped)
# tensor([[1, 2],
# [3, 4],
# [5, 6]])
torch.mm()
기능: 두 개의 2D 행렬(매트릭스) 사이의 행렬 곱셈을 수행합니다.
예를 들어, input 행렬의 크기가 (N, M), mat2 행렬의 크기가 (M, P)일 때, 결과 행렬의 크기는 (N, P)가 됩니다.
import torch
# 2D 행렬 생성
input = torch.tensor([[1, 2],
[3, 4]]) # shape: (2, 2)
mat2 = torch.tensor([[5, 6],
[7, 8]]) # shape: (2, 2)
# torch.mm()을 사용하여 행렬 곱셈 수행
result_mm = torch.mm(input, mat2)
# 결과 출력
print("torch.mm() 결과:")
print(result_mm)
torch.mm() 결과:
tensor([[19, 22],
[43, 50]])
torch.matmul()
기능: 다양한 차원의 텐서 간의 행렬 곱셈을 수행합니다. 특히, 브로드캐스팅(broadcasting)이 가능합니다.
다차원 텐서 지원: torch.matmul()은 다양한 차원의 텐서 간의 곱셈을 처리할 수 있으며, 특히 브로드캐스팅이 가능합니다. 반면 torch.mm()은 2D 텐서에만 적용됩니다.
내적과의 관계: torch.matmul()은 1D 벡터 간의 내적 연산을 포함하고 있습니다.
import torch
# 다차원 텐서 생성
tensor3 = torch.tensor([[1, 2], [3, 4]]) # shape: (2, 2)
tensor4 = torch.tensor([5, 6]) # shape: (2,)
# torch.matmul()을 사용하여 다차원 텐서 간의 행렬 곱셈 수행 (브로드캐스팅 활용)
result_broadcast = torch.matmul(tensor3, tensor4)
# 결과 출력
print("다차원 텐서와 브로드캐스팅을 이용한 torch.matmul() 결과:")
print(result_broadcast)
다차원 텐서와 브로드캐스팅을 이용한 torch.matmul() 결과:
tensor([11, 27])
위 예시에서는 torch.matmul()을 사용하여 2D 행렬 tensor3과 1D 텐서 tensor4 간의 곱셈을 수행했습니다. torch.matmul()은 브로드캐스팅을 통해 자동으로 tensor4를 (2,)에서 (2, 1)로 확장하여 행렬 곱셈을 수행합니다.
PyTorch project template
PyTorch 프로젝트를 구성하는 일반적인 템플릿은 다음과 같은 구성 요소들을 포함할 수 있습니다. 이 템플릿은 프로젝트의 구조화와 코드의 재사용성을 높이며, 팀원 간 협업을 용이하게 합니다.
project_name/
│
├── data/ # 데이터 관련 코드 및 데이터셋
│ ├── dataset.py # 데이터셋 정의 및 전처리
│ ├── dataloader.py # 데이터로더 정의
│ └── transforms.py # 데이터 전처리 함수
│
├── models/ # 모델 관련 코드
│ ├── model.py # 모델 아키텍처 정의
│ └── utils.py # 모델 관련 유틸리티 함수
│
├── training/ # 학습 관련 코드
│ ├── train.py # 학습 스크립트
│ ├── evaluate.py # 평가 스크립트
│ └── utils.py # 학습 관련 유틸리티 함수
│
├── config/ # 설정 관리
│ ├── config.yaml # 설정 파일 (하이퍼파라미터, 경로 등)
│ └── ...
│
├── utils/ # 유틸리티 함수들
│ ├── helper.py # 일반적인 도움 함수
│ └── ...
│
├── experiments/ # 실험 결과 및 로그
│ ├── logs/ # 학습 로그 디렉토리
│ └── checkpoints/ # 모델 체크포인트 디렉토리
│
├── README.md # 프로젝트 설명 및 사용법
└── requirements.txt # 필요한 패키지 목록
'AI&ML' 카테고리의 다른 글
[부스트캠프] 프리코스 정리 (1) | 2024.07.05 |
---|---|
[부스트캠프] 인공지능 기초 다지기 - 딥러닝 - Layer (1) | 2024.07.03 |
[부스트캠프] 인공지능 기초 다지기 - 기초 수학 - 확률론 (1) | 2024.07.03 |
[부스트캠프] 인공지능 기초 다지기 - 기초 수학 - 벡터 (1) | 2024.07.03 |
[CVPR 2022 tutorial] unified image-text modeling (0) | 2024.04.03 |