학습정리(1~3강)
- 텐서플로우와 파이토치의 차이
텐서플로우는 Define and Run : 그래프를 먼저 정의 → 실행 시점에 데이터를 먹여줌
파이토치는 Define by Run: 실행을 하면서 그래프를 생성함
- Tensor의 view, squeeze, unsqueeze
tensor를 조정 가능하게함
view: reshape과 거의 비슷하며 Tensor의 shape을 변환할 수 있다.
squeeze: 차원의 개수가 1인 차원을 삭제(압축)
unsqueeze: 차원의 개수가 1인 차원을 추가
- 행렬곱셈 연산은 dot이 아닌 mm사용
dot은 벡터간 연산, mm은 행렬간 연산이다.
- mm과 matmuldms broadcasting 지원 차이
mm: broadcast x, matmul은 broadcasting o
- 미분의 대상이 되는 것은 requires_grad=True, backward함수 사용!
학습정리(4~5강)
요약
4강(AutoGrad_Optimizer): 자신만의 모델을 생성하기
parameter == weights값이며 학습이 될 때 update 되어야 함. → required_grad=True로 됨(학습대상이 되기 때문에)
Backward=required_grad가 True인 인자 즉 layer에 있는 parameter(weigths)에 대한 미분을 수행한다. 여기서 미분의 수행은 forward의 결과값과 실제값간의 차이(loss)에 대해 미분을 수행한다.
backward 순서를 살펴보면
- optimizer.zero_grad() ← optimizer 초기화
- outputs = model(inputs) ← forwarding(예측값추출)
- loss = criterion(outputs, labels) ← loss 수행
- loss.backward() ← 미분값 추출 loss를 줄이는 방향으로 update를 해줘야하기 때문에 loss backward해주는 것이다.
- optimizer.step() ← 파라미터 업데이트 x=x-f’(x)기억!
5강(Pytorch datasets_dataloaders): 모델에 데이터를 넣기위한 방법
어떻게 대용량 데이터를 모델에 먹일까에 대한 내용!
내가 생각하는 dataset클래스란?
의도한대로 데이터 생성방법을 지정하고 각 데이터에 대해 index를 먹이는것!
Dataset클래스 구성
- **init: 초기 데이터 생성방법 지정**
- len: 데이터의 전체 길이
- getitem: index를 주었을 때 반환되는 데이터 형태
내가 생각하는 DataLoader클래스란?
index를 이용해 데이터를 묶어 모델에 던져주는 클래스(batch, shuffle등 사용 가능)
여러 파라미터를 가지고 있으니 뭔지 확인해보기
내용 정리
torch.nn.Module
- 딥러닝을 구성하는 Layer의 base class
- input, output, forward, backward 정의
- 학습의 대상이 되는 parameter(tensor)정의
nn.Parameter
- tensor객체의 상속 객체
- nn.Module내에 attribute가 될 때는 required_grad=True로 지정되어 학습대상이 되는 Tensor
- 우리가 직접 지정할 일은 거의없음
Backward
- layer에 있는 parameter들의 미분을 수행
- forward의 결과값 (model의 output=예측치)과 실제값간의 차이(loss)에 대해 미분을 수행
- 해당 값으로 parameter업데이트
- loss, autograd
Backword 순서
for epoch in epoches:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
print(loss)
loss.backward()
optimizer.step()
backward from the scratch
- 실제 backward는 module 단계에서 직접 지정가능
- module에서 backward와 optimizer 오버라이딩
- 사용자가 직접 미분 수식을 써야하는 부담
→ 쓸일을 없지만 순서를 이해해야한다.
Dataset 클래스
- 데이터 입력 형태를 정의하는 클래스
- 데이터를 입력하는 방식의 표준화
- image, text, audio등에 따른 다른 입력정의
기본 구성 요소
- init: 초기 데이터 생성방법 지정, 데이터의 위치나 파일명과 같은 초기화 작업을 위해 동작한다. 이렇게 함으로 모든 데이터를 메모리에 로드하지 않고 효율적으로 사용한다.
- len: 데이터의 전체 길이, 해당 메서드를 통해 현재 불러오는 데이터의 인덱스가 적절한 범위 안에 있는지 확인할 수 있다.
- getitem: index값을 주었을 때 반환되는 데이터의 형태(x, y), 일반적으로 원본데이터를 가져와서 전처리하고 증강하는 부분이 진행된다.
DataLoader 클래스
- data의 배치를 생성해주는 클래스
- dataset클래스로부터 index로 들어오기 때문에 이를 이용하여 배치를 생성하고 shuffle하는 등 배치를 정해줄 수 있음
참고: 부스트코스 AI Tech 4기 최성철 교수님 pytorch 강의