부스트캠프 2주차

TAEJUN YOUN·2022년 9월 29일
0

학습정리(1~3강)

  1. 텐서플로우와 파이토치의 차이
    텐서플로우는 Define and Run : 그래프를 먼저 정의 → 실행 시점에 데이터를 먹여줌
    파이토치는 Define by Run: 실행을 하면서 그래프를 생성함
  2. Tensor의 view, squeeze, unsqueeze
    tensor를 조정 가능하게함
    view: reshape과 거의 비슷하며 Tensor의 shape을 변환할 수 있다.
    squeeze: 차원의 개수가 1인 차원을 삭제(압축)
    unsqueeze: 차원의 개수가 1인 차원을 추가
  3. 행렬곱셈 연산은 dot이 아닌 mm사용
    dot은 벡터간 연산, mm은 행렬간 연산이다.
  4. mm과 matmuldms broadcasting 지원 차이
    mm: broadcast x, matmul은 broadcasting o
  5. 미분의 대상이 되는 것은 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 순서를 살펴보면

  1. optimizer.zero_grad() ← optimizer 초기화
  2. outputs = model(inputs) ← forwarding(예측값추출)
  3. loss = criterion(outputs, labels) ← loss 수행
  4. loss.backward() ← 미분값 추출 loss를 줄이는 방향으로 update를 해줘야하기 때문에 loss backward해주는 것이다.
  5. optimizer.step() ← 파라미터 업데이트 x=x-f’(x)기억!

5강(Pytorch datasets_dataloaders): 모델에 데이터를 넣기위한 방법

어떻게 대용량 데이터를 모델에 먹일까에 대한 내용!

내가 생각하는 dataset클래스란?

의도한대로 데이터 생성방법을 지정하고 각 데이터에 대해 index를 먹이는것!

Dataset클래스 구성

  1. **init: 초기 데이터 생성방법 지정**
  2. len: 데이터의 전체 길이
  3. 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) # input을 넣었을 때 예측값을 받는다.
	loss = criterion(outputs, labels) # loss를 받는다.
	print(loss)
	loss.backward() # parameters의 gradients를
	optimizer.step() # parameters를 업데이트 해준다.

backward from the scratch

  • 실제 backward는 module 단계에서 직접 지정가능
  • module에서 backward와 optimizer 오버라이딩
  • 사용자가 직접 미분 수식을 써야하는 부담

→ 쓸일을 없지만 순서를 이해해야한다.

Dataset 클래스

  • 데이터 입력 형태를 정의하는 클래스
  • 데이터를 입력하는 방식의 표준화
  • image, text, audio등에 따른 다른 입력정의

기본 구성 요소

  1. init: 초기 데이터 생성방법 지정, 데이터의 위치나 파일명과 같은 초기화 작업을 위해 동작한다. 이렇게 함으로 모든 데이터를 메모리에 로드하지 않고 효율적으로 사용한다.
  2. len: 데이터의 전체 길이, 해당 메서드를 통해 현재 불러오는 데이터의 인덱스가 적절한 범위 안에 있는지 확인할 수 있다.
  3. getitem: index값을 주었을 때 반환되는 데이터의 형태(x, y), 일반적으로 원본데이터를 가져와서 전처리하고 증강하는 부분이 진행된다.

DataLoader 클래스

  • data의 배치를 생성해주는 클래스
  • dataset클래스로부터 index로 들어오기 때문에 이를 이용하여 배치를 생성하고 shuffle하는 등 배치를 정해줄 수 있음

참고: 부스트코스 AI Tech 4기 최성철 교수님 pytorch 강의

profile
Study and Share

0개의 댓글