일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 퀵정렬
- rnn
- 인공지능
- 딥러닝
- 이진 탐색
- pytorch
- 재귀함수
- 최단 경로
- 스택
- 알고리즘
- 캐치카페신촌점 #캐치카페 #카페대관 #대학생 #진학사 #취준생
- LSTM
- 계수정렬
- GRU
- 선형대수
- DFS
- 큐
- RESNET
- 정렬
- BFS
- 머신러닝
- Machine Learning
- 다이나믹 프로그래밍
- 삽입정렬
- 선택정렬
- 그리디
- AI
- Today
- Total
hyeonzzz's Tech Blog
[딥러닝 파이토치 교과서] 2장. 실습 환경 설정과 파이토치 기초 본문
2.1 파이토치 개요
PyTroch
파이토치 : 파이썬 기반의 딥러닝 프레임워크
파이토치 특징 및 장점
GPU에서 텐서 조작 및 동적 신경망 구축이 가능한 프레임워크
- GPU : 연산 속도를 빠르게 하는 역할
- GPU를 사용하면 빠른 기울기 계산(미분)이 가능하다
- CUDA, cuDNN이라는 API를 통해 GPU를 연산에 사용할 수 있다
- GPU 사용은 딥러닝 학습에서 필수적이다
- Tensor : 파이토치의 데이터 형태
- 텐서는 단일 데이터 형식으로 된 자료들의 다차원 행렬이다
- 텐서는 .cuda()를 사용해서 GPU로 연산을 수행하게 할 수 있다
- 동적 신경망 : 훈련을 반복할 때마다 네트워크 변경이 가능한 신경망
- 학습 중에 은닉층을 추가하거나 제거할 수 있다
- Define by Run : 연산 그래프를 정의하는 것과 동시에 값도 초기화
- 따라서 연산 그래프와 연산을 분리해서 생각할 필요가 없다
* 연산 그래프
: 방향성이 있으며 텐서를 의미하는 노드와 연산을 담당하는 엣지로 구성된다.
신경망은 연산 그래프를 이용하여 계산을 수행한다.
벡터, 행렬, 텐서
벡터 : 1차원 배열 형태. 숫자들의 리스트
행렬 : 행과 열로 표현되는 2차원 배열 형태
텐서 : 3차원 이상의 배열 형태
파이토치의 아키텍처
- 파이토치 API : 사용자가 사용하는 라이브러리
- 파이토치 엔진 : 다차원 텐서 및 자동 미분 처리
- 연산 처리 : 텐서에 대한 연산
파이토치 API
- 사용자 인터페이스를 제공하지만 실제 계산은 수행하지 않는다
- 파이토치 엔진으로 작업을 전달한다
패키지 종류
- torch : GPU를 지원하는 텐서 패키지
- torch.autograd : 자동 미분 패키지
- torch.nn : 신경망 구축 및 훈련 패키지
- torch.multiprocessing : 파이썬 멀티프로세싱 패키지
- torch.utils : DataLoader 및 기타 유틸리티 제공
파이토치 엔진
- Autograd C++
- Aten C++
- JIT C++
- Python API
연산 처리
상위의 API에서 할당된 거의 모든 계산을 수행한다
텐서
텐서는 1차원이든 n차원이든 메모리에 저장할 때는 1차원 배열 형태가 된다. 변환된 1차원 배열은 스토리지(storage)라고 한다.
- offset : 텐서에서 첫 번째 요소가 스토리지에 저장된 인덱스
- stride : 다음 요소를 얻기 위해 건너뛰기가 필요한 스토리지의 요소 개수
* 3차원 텐서를 1차원으로 변환
다른 형태를 갖지만 스토리지의 값들은 서로 같다. 따라서 행렬/텐서를 구분하는 용도로 오프셋과 스트라이드를 사용한다.
* A를 1차원으로 변환
offset = 1
stride = (3,1)
* A의 전치 행렬을 1차원으로 변환
offset = 1
stride = (2,1)
2.2 파이토치 기초 문법
모델 정의
- 계층 : 모듈 또는 모듈을 구성하는 한 개의 계층
- 모듈 : 한 개 이상의 계층이 모여서 구성된 것
- 모델 : 최종적으로 원하는 네트워크
모델의 파라미터 정의
- 손실 함수 : 출력과 실제 값 사이의 오차 측정
- BCELoss : 이진 분류를 위해 사용
- CrossEntropyLoss : 다중 클래스 분류를 위해 사용
- MSELoss : 회귀 모델에서 사용
- 옵티마이저 : 데이터와 손실 함수를 바탕으로 모델의 업데이트 방법을 결정한다
- step() 메서드를 통해 전달받은 파라미터를 업데이트한다
- 모델의 파라미터별로 다른 기준(학습률)을 적용시킬 수 있다
- zero_grad() : 옵티마이저에 사용된 파라미터들의 기울기를 0으로 만든다
- torch.optim.lr_scheduler : 에포크에 따라 학습률을 조절할 수 있다
- 학습률 스케줄러 : 에포크를 지날 때마다 학습률을 감소시켜 준다. 학습 초기에는 빠른 학습을 진행하다가 전역 최소점 근처에 다다르면 학습률을 줄여서 최적점을 찾아갈 수 있도록 한다.
* 전역 최소점과 최적점
전역 최소점 : 오차가 가장 작을 때의 값
지역 최소점 : 전역 최소점을 찾아가는 과정에서 만나는 홀
모델 훈련
학습 시킨다 : y = wx + b라는 함수에서 w 와 b의 적절한 값을 찾는다
- 모델, 손실 함수, 옵티마이저 정의
- output = model(input) : 출력 계산
- loss = loss_fn(output, target) : 오차 계산
- optimizer.zero_grad( ) : 기울기 초기화
- loss.backward( ) : 역전파 학습
- optimizer.step( ) : 기울기 업데이트
훈련 과정 모니터링
텐서보드를 이용해 파라미터 값이 어떻게 변화하는지 시각화하여 살펴본다
model.train( ) & model.eval( )
model.train( ) : 훈련 데이터셋에 사용하며 모델 훈련이 진행될 것임을 알린다. 드롭아웃이 활성화 된다
model.eval( ) : 모델을 평가할 때는 모든 노드를 사용하겠다는 의미. 검증과 테스트 데이터셋에 사용한다.
- model.train( ), model.eval( )을 선언해야 모델의 정확도를 높일 수 있다
- model.eval( )에서 with torch.no_grad( ) 를 사용하는 이유 : 검증, 테스트 과정에서는 역전파가 필요하지 않기 때문에 기울기 값을 저장하지 않도록 한다.
'Deep Learning > Pytorch' 카테고리의 다른 글
[딥러닝 파이토치 교과서] 6장. 합성곱 신경망 Ⅱ -(1) (0) | 2024.04.12 |
---|---|
[딥러닝 파이토치 교과서] 5장. 합성곱 신경망 I -(2) (2) | 2024.04.03 |
[딥러닝 파이토치 교과서] 5장. 합성곱 신경망 I -(1) (1) | 2024.03.29 |
[딥러닝 파이토치 교과서] 4장. 딥러닝 시작 (0) | 2024.03.20 |
[딥러닝 파이토치 교과서] 1장. 머신러닝과 딥러닝 (2) | 2024.03.14 |