[3주차] 8.17 화

William JO·2021년 8월 17일
0
post-thumbnail

✏️Introduction to PyTorch

.vs TensorFlow

  • TensorFlow
    • Static graphs (Define and Run)
    • 그래프를 먼저 정의 → 실행시점에 data feed
    • Production, Cloud, Multi-GPU 등 scalability에 강점을 가짐
  • PyTorch
    • Dynamic computation graphs (Define by Run)
    • 실행을 하면서 그래프를 생성하는 방식
    • 즉시 확인 및 디버깅 가능 (pythonic code)
    • 사용하기 편한 장점
    • GPU support, Good API and community

Numpy + AutoGrad + Function

  • Numpy 구조를 가지는 Tensor 객체로 array 표현
  • 자동미분을 지원하여 DL 연산을 지원
  • 다양한 형태의 DL을 지원하는 함수와 모델을 지원함

✏️PyTorch Basics

Tensor

  • 다차원 arrays를 표현하는 PyTorch 클래스
  • nump의 ndarray와 유사 (tensorflow의 tensor와도 유사)
# numpy - ndarray
import numpy as np

n_array = np.arrange(10).reshape(2,5)
print(n_array)
print("ndim: ", n_array.ndim, "shape: ", n_array.shape)

# pytorch - tensor
import torch

t_array = torch.FloatTensor(n_array)
print(t_array)
print("ndim: ", t_array.ndim, "shape: ", t_array.shape)
  • pytorch의 tensor는 GPU에 올려서 사용가능
import torch

data = [[3, 5, 10], [2, 3, 6]]
x_data = torch.tensor(data)

x_data.device
# device(type='cpu')

if torch.cuda.is_available():
	x_data_cuda = x_data.to('cuda')
x_data_cuda.device
# device(type='cuda', index=0)

Tensor Handling

import torch

tensor_ex = torch.rand(size=(2,3,2)) # torch.size([2,3,2])

tensor_ex.view([-1, 6]) # torch.size([2,6])

tensor_ex.reshape([-1, 6]) # torch.size([2,6])

Tensor Operations

  • 행렬곱셈 연산은 함수 dot이 아닌 mm 사용
    -> dot : 벡터(1D tensor) 내적용, mm, matmul : 행렬(2D tensor) 곱셈용
  • 나머지 연산은 numpy와 동일
  • mm과 matmul의 차이: broadcasting 지원 유무
    -> mm : 미지원, matmul : 지원
    -> 결과가 헷갈릴 수 있으니 mm 사용 추천

    -> (5(=batch),2,3) → (2, 3) · (3, 1)[broadcasting] = (5,2,1)

Tensor operations for ML/DL formula

  • nn.functional 모듈을 통해 다양한 수식 변환을 지원

AutoGrad

  • PyTorch의 핵심은 자동 미분의 지원 → backward 함수 사용
  • 미분 시킬 target은 'requires_grad=True' 파라미터 설정 필요
import torch

w = torch.tensor(2.0, requires_grad=True)
y = w**2
z = 10 * y + 25
z.backward()
w.grad # tensor(40.)

a = torch.tensor([2., 3.], requires_grad=True)
b = torch.tensor([6., 4.], requires_grad=True)
Q = 3*a**3 - b**2
external_grad = torch.tensor([1., 1.])
Q.backward(gradient = external_grad)
a.grad # tensor([36., 81.])
b.grad # tensor([-12., -8.])

🔗Image Reference


✏️PyTorch project

Project Template

  • 초기 단계에서는 대화식 개발 과정이 유리 → 개발하고 확인하고, 개발하고 확인하고...
    -> 학습과정과 디버깅 등 지속적인 확인
  • 배포 및 공유 단계에서는 jupyter notebook 공유의 어려움
    -> 쉬운 재현의 어려움, 실행순서 꼬임
  • 다양한 프로젝트 템풀릿이 존재 → 필요에 따라 수정하여 사용
  • 실행, 데이터, 모델, 설정, 로깅, 지표, 유틸리티 등 다양한 모듈들을 분리하여 프로젝트 템플릿화


📕특강 - 라이엇 게임즈 유석문 CTO님

프로그래머로 산다는 것

  • 코딩을 재밌어하는 사람이 프로그래머가 되어야 한다.
    -> 단순히 밥벌이로? 그럼 하지 마.
  • 코드를 이해해라. 단순히 copy & paste로는 개발 능력이 늘 수 없다.
  • 개발자는 항상 새로운 기술을 공부하고 적용할 준비가 되어 있어야 한다.

개발자의 필수능력

  • 깔끔한 코드
    - 사람이 이해하기 쉬운 코드 (readability)
    • 변경 용이한 코드
    • 유지보수 비용이 낮은 코드
    • 사용하는 코드만 만들기 (Caller Create)
    • 리팩토링 (Refactoring)
    • 코드 읽기 (Code Review
    • ATDD : client 입장에서 테스트
    • TDD : developer 입장에서 테스트 (unit test)
  • 적절한 논리력
    • 원리 탐색 능력
    • 제약조건을 고려한 해법
    • 단순한 디자인
    • 알고리즘과 자료구조 중요
  • 엔지니어(engineer)란? : 가용 가능한 리소스를 갖고 가장 적절한 해법을 찾아 문제를 해결하는 자
    (닭 잡는데 소 잡는 칼 쓸 필요 없다)

능력을 어떻게 키울까?

  • 꾸준한 연습 (Daily Practice)
  • 매일 몸값 올리는 시간을 가져라
  • 멀리 가고 싶다면 함께 가라
  • 현재 필요한 만큼만 해라
  • 간단하게 해라

좋은 개발자

  • 협업 (상대를 이해하자)
    -> 자아존중감 높은 사람이 되자 : 타인의 부정적 견해에 크게 영향 받지 말라
  • 공유 (주변이 똑똑해져야 내가 편함)
    -> 내가 속한 무리의 가장 똑똑한 사람이라면 그 무리를 떠나라.
  • domain knowledge가 다양

0개의 댓글

관련 채용 정보