[네이버 부스트 캠프] AI-Tech-re - week3(1)
학습기록 - 11
오늘 한 일
- 우선순위 큐 알고리즘 정리
- 파이토치 강의 정리 ( 1, 2, 3)
- 필수 과제 - ~ nn.module 까지
- 피어) 파이토치 강의 요약 발표 & 알고리즘 요약 발표 & 필수 과제 풀이
1. 강의 복습 내용
Pytorch
-
PyTorch VS TF
현재 있는 데이터를 그래프로 그린 후 Back Prop VS 현재 시점에서 그래프를 그린 후 Back Prop
-
Computational Graph
-
Define and Run : TF 실행 전 그래프 정의 후, 실행 시점에 데이터 feed 장점 : production and scalability
-
Define by Run : PyTorch 실행 하면서 그래프 정의 장점 : Pythonic Code / GPU Support, Good API and community / 편함
-
Pytorch : Numpy + AutoGrad + Function(DL)
-
-
Pytorch vs numpy
-
Pytorch는 numpy 기능과 함께 AutoGrad 기능을 지원
-
Tensor : 다차원 Arrays 표현 ( = numpy.ndarray )
-
Tensor는 Data 또는 Array 로 표현 가능하다.
-
Tensor의 operation은 numpy에서 사용하던 방법 그대로
+
GPU에 올려서 사용 가능
+
view ( ~= reshape, contiguity 보장 차이)
squeeze (차원의 개수가 1인 차원을 삭제.)
, unsqueeze (차원의 개수가 1인 차원을 추가.) -
+, - 는 동일 (차원 맞을 경우)
dot : 내적, 행렬 곱셈 x
mm : 행렬 곱셈 o, broad casting x
matmul : 행렬 곱셈 o, broad casting o -
Auto Grad PyTorch 구조 이해하기
-
jupyter notebook은 프로젝트 개발에 있어서 한계가 존재. -> 블록화 (모듈 분리) / 다양한 프로젝트 템플릿 사용
-
그림으로 표현
-
우선순위 큐
-
우선순위 큐 정의
-
힙에 의한 큐
-
Priority Queue에 의한 큐
2. 고민 내용, 결과 (과제 수행 과정, 결과물 정리)
-
필수 과제 : Custom model 개발
과제에 주어진 튜토리얼에 따라 파이토치 document 읽기, 예제 활용
- 고민 : 임의의 크기의 3D tensor에서 대각선 요소 모으기 - 3D gather
어떻게 expand를 이용해서 대각행렬을 뽑아낼 수 있을까?
2차원으로 만드는 방법?
- 고민 : 임의의 크기의 3D tensor에서 대각선 요소 모으기 - 3D gather
어떻게 expand를 이용해서 대각행렬을 뽑아낼 수 있을까?
3. 피어세션 정리
-
Pytorch 관련 튜토리얼과 개요이기 때문에 많이 어려웠던 점이 없었다.
-
필수 과제 풀면서 어려운 점 질문, 양이 많아서 제대로 하지 못했다.
-
선택과제 리뷰를 하려고 했으나, pytorch를 배우면서 다시 해보기로 결정. (너무 어렵다.)
4. 학습 회고
-
발표 정리에 시간을 다 써서 필수과제와 Data Viz 강의를 제대로 듣지 못했다.
Data Viz에 대한 시간을 어떻게 활용해야 할지 고민이다.
이번 과제는 엄청 유익하다고 생각하는데, 영어를 제대로 받아들이지 못해서 어려움을 느꼈다.
하지만 꾸준히 하면 늘 것 같다. -
마스터 클래스
프로그래머 산다는 것
왜 되려고 하는가? 난.. 만들고 싶은게 있다
1-1 개발 경력이 있는 분들도 못하는 사람이 너무 많다.
1-2 왜 벌어지는 것일까? 이 상황을 어떻게 피할 것인가?
시간만 정해져 있을 때, 검색 -> 복사 & 붙여넣기 -> 되는 것처럼 보일 때까지
=> 이렇게 되면 실력이 그렇게 된다.
1-3 이렇게 되는 주역이 누굴까?
나쁜 고객과 상사 + 탐욕스러운 회사 + 비협조적인 동료 (사람들이 변화를 두려워한다.)
--> 통제할 수 없는 외부요인 (그냥 발생할 일이다.)
내 자신을 성장시키고 지켜낼 수 있으려면?
1-4 개발자의 필수 능력
1. 깔끔한 코드 :
- 사람이 이해하기 쉬운 코드
( Readability )
- 코드를 작성한다 하면은 다른 사람이 고칠 수 있게 만들어줘야 한다.
( ex- for문에서 I,j)
- 변경이 용이한 코드
- 유지보수 비용이 낮은 코드
"나는 코드를 지우는 사람 ( 유지보수 ) 이다!"
2. 적절한 논리력 : 극단적 논리력이 아닌 적절해야 한다.
( 현재의 문제, 지금 가용가능한 자원 내에서 가장 적합해야 한다. )
제약 조건을 고려한 해법
( 계속 반복하면서 숙련하자. )
단순한 디자인
1-5 깔끔한 코드 작성법
- 고객 입장에서 만족스러운가? ATDD (Acceptance Test Driven Development)
- 개발자 입장에서 만족스러운가? TDD (Test Driven Development)
-> 더 중요, 내일 더 상세히🎉
1. 사용하는 코드만 만들기 (Caller Create)
- 언제나 사용 가능한 코드만 만든다.
- Dead Code는 지워버린다. ( 버전관리시스템 이용하기 )
2. 리팩토링 (Refactoring)
- 외부의 속성이 변하지 않고, 내부를 바꿀 수 있는 능력
- 다시 보면서 확인하는 것
3. 코드 읽기 (Code Review)
- 다른 사람의 코드 리뷰를 통해, readability를 늘려야 한다.
- pull request

1-6 적절한 논리력
- 복잡한 문제를 가장 작은 단위로 잘라서 점진적으로 해결하자.
1. 알고리즘과 데이터 구조
2. 단순한 디자인
3. 진화적 디자인
4. 협업
5. 기술 벤치마킹
1-7 실천법
1. 꾸준한 연습 (Daily Pratice) -> 매일 매일 연습하면서 고치자.
2. 매일 몸값 올리는 시간을 가져라. (연습하는 시간)
3. 멀리 가고 싶다면 함께 가라. (동기들과 같이 실천하자)
4. 현재 필요한 만큼만 하라. (꼭 필요한 만큼만 하라, 미래를 생각해서 뭐 하지 말자.)
5. 간단하게 하라.
2-1 좋은 00 개발자. AI!
1. 00 -> 분야가 다양 & 시간 변동 -> AI가 특별하지 않은 순간이 올 수 있다.
-> 전문성이라고 해서 하나가 전부라고 생각하지 말자.
2. 좋은 -> 공유 + 협업
시간 변동성이 없다. 당연히 갖춰야 한다.
2-2 공유하는 이유 ?
1. 현실적인 목적은? 주변이 똑똑해져야 내가 편함
-> 사고를 수습하는 일이 줄어든다.
-> 중요한 일을 할 여유를 가질 수 있음.
2. 좋은 평판을 얻을 수 있음.
-> 경력 3~5년부터는 스카우트가 오게 된다.
3. 주변의 덕을 볼 확률이 올라감.
2-3 공유 대상
1. 실패한 이야기 : 내가 실패했을 때, 해결했던 과정 / 다른 사람들의 실수를 없애 주는 것
2. 새로운 기술 공유 : 내가 그 기술을 시도해보고, 장단점에 대해 내 생각을 해보는 것
3. 성공한 이야기 : 잘난 척이 아닌, 내가 직접하는 회고
4. 재밌는 이야기
2-5 협업의 전제 조건 : 상대를 이해하자.
1. 기획자, 개발자, QA
2-6 협업의 필수요소 : 자아존중감. 인정할거 인정하고, 상처는 받지 말고 내 스스로를 지키자.
- 사고를 치면서 긍정적으로 생각하자. 실패해야 안다.
3-1 좋은 개발자.

꾸준함! 연습! 실천!