내일배움캠프 7주차 Weekly I Learned

정형빈·2022년 10월 21일
0

WIL

목록 보기
8/15

내일배움캠프 7주차 회고

7주차 시간표

다음주에 있을 머신러닝 프로젝트를 위해 이번주 중으로 머신러닝 프로젝트를 마쳐야 했다. 저번주에 1주차 내용만 들었을때의 나의 감상은 음... 모르겠다! 였다. 그리고 4주차까지 다 마친 지금은 음... 진짜 모르겠다! 이다. 이미 러닝이 완료된 프로그램을 가져와 사용하는 것은 어느정도 하겠는데 머신을 처음부터 딥러닝 시키는것은 이해도 안가고 어렵기만하다. 당장 다음주가 머신러닝 프로젝트라고 하는데 이정도의 이해도로 잘 해낼수 있을지 벌써 걱정이다.

실전 머신러닝 적용 원격강의

-2주차~4주차

2주차

  • 논리회귀란?
    • 머신러닝에서, 입력값과 범주 사이의 관계를 구하는 것
  • 시그모이드 함수
    • 실제 많은 자연, 사회현상에서는 특정 변수에 대한 확률값이 선형이 아닌 S 커브 형태를 따르는 경우가 많은데 이러한 S-커브를 함수로 표현해낸 것이 바로 로지스틱 함수(Logistic function)이다. 딥러닝에서는 시그모이드 함수(Sigmoid function)라고 불린다.
    • 시그모이드 함수의 특징 :
      x(입력)가 음수 방향으로 갈 수록 y(출력)가 0에 가까워지고,
      x(입력)가 양수 방향으로 갈 수록 y(출력)가 1에 가까워진다
      즉, 시그모이드 함수를 통과하면 0 에서 1 사이 값이 나온다
    • Keras에서 이진 논리 회귀의 경우 binary_crossentropy 손실 함수를 사용한다.
  • 다항 논리 회귀
    • 논리회귀 중 클래스를 3개 이상으로 나눈 것
    • 원핫 인코딩(one-hot-encording) : 문제를 풀 때 출력값의 형태를 가장 예쁘게 표현할 수 있는 방법
      • 원핫 인코딩을 만드는 방법
        1. 클래스(라벨)의 개수만큼 배열을 0으로 채운다.
        2. 각 클래스의 인덱스 위치를 정한다.
        3. 각 클래스에 해당하는 인덱스에 1을 넣는다.
    • Keras에서 다항 논리 회귀의 경우 categorical_crossentropy 손실 함수를 사용한다.
  • 전처리
    • 전처리란?
      전처리는 넓은 범위의 데이터 정제 작업을 뜻한다. 필요없는 데이터를 지우고 필요한 데이터만을 취하는 것, null 값이 있는 행을 삭제하는 것, 정규화(Normalization), 표준화(Standardization) 등의 많은 작업들을 포함하고 있다.
    • 정규화 : 데이터를 0과 1사이의 범위를 가지도록 만드는 것
    • 표준화 : 데이터의 분포를 정규분포로 바꿔두는 것

3주차

  • 딥러닝이란?

    • 머신 러닝의 한 분야로 학습 과정 동안 인공 신경망으로서 예시 데이터에서 얻은 일반적인 규칙을 독립적으로 구축(훈련)하는 것이다.
  • 딥러닝의 다양한 개념과 기법

    • 배치 사이즈와 에폭

    • 활성화 함수

    • 과적합과 과소적합

    • 데이터 증강

    • 드랍아웃

    • 앙상블

    • 학습률 조정

  • 딥러닝의 역사

    • 딥러닝의 태동을 불러온 XOR 문제

    • 딥러닝의 발전을 가져온 아이디어인 역전파

  • 딥러닝의 주요 개념

    • batch size(배치 사이즈) : 전체 트레이닝 데이터 셋을 여러 작은 그룹을 나누었을 때 하나의 소그룹에 속하는 데이터 수

    • epoch(에폭) : 전체 트레이닝 셋이 신경망을 통과한 횟수 의미

    • iteration(이터레이션) : 1-epoch를 마치는데 필요한 미니배치 갯수 혹은 1-epoch를 마치는데 필요한 파라미터 업데이트 횟수

    • Activation Function(활성화 함수) : 입력 신호의 총합을 출력신호로 변환하는 함수

    • 과적합(Overfitting) : 모델이 훈련데이터에만 특수한 성질을 과하게 학습해 일반화를 못해 결국 테스트데이터에서 오차가 커지는 현상

    • 과소적합(Underfitting) : 훈련데이터에 과적합도 못하고 일반화 성질도 학습하지 못해, 훈련/테스트 데이터 모두에서 오차가 크게 나오는 경우

  • 딥러닝의 주요 스킬

    • Data augmentation(데이터 증강기법) : 갖고 있는 데이터셋을 여러 가지 방법으로 증강하여 실질적인 학습 데이터셋의 규모를 키울 수 있는 방법

    • Dropout(드랍아웃) : 서로 연결된 연결망에서 0부터 1 사이의 확률로 뉴런을 제거하는 기법

    • Ensemble(앙상블) : 여러 개의 분류기를 생성하고, 그 예측을 결합함으로써 보다 정확한 예측을 도출하는 기법

    • Learning rate decay(Learning rate schedules) : 딥 러닝 신경망이 확률적 경사 하강법 최적화 알고리즘을 사용하여 훈련하는데서 나온 파라미터

4주차

  • 신경망
    • 신경망을 구성하는 방법은 정말 여러가지가 있는데, 이 중 가장 많이 쓰이는 것은 합성곱 신경망(CNN), 순환 신경망(RNN), 생성적 적대 신경망(GAN)이다.
  • 전이학습
    • 이미 학습된 모델을 비슷한 문제를 푸는데 다시 사용하는 것
  • 합성곱(convolution) : 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 연산자이다.
    • 이러한 합성곱 연산을 사용하는 인공신경망(Artificial Neural Network, ANN) 중의 하나가 합성곱 신경망이다.

원격강의는 지금까지 이런식으로 강의노트를 요약해서 나름 핵심정리 노트처럼 TIL에 작성을 해왔는데 앞으로는 이것보다는 강의를 보고 따라하고 실습내용을 구현하면서 나온 내용을 깃허브에 남겨서 해당 깃허브 주소를 남기는 식으로 TIL과 WIL을 작성하도록 변경해야겠다. 무엇보다 이론을 위주로 공부하다보니까 내용이 어려우면 이해에 시간이 많이걸리고 실습 위주의 강의에서는 내용정리를 하기 힘들어서 결과물이 빈약해지는 것 같아서 새로운 방식을 채용하는 것이 훨씬 좋아보인다.

10.12 머신러닝 특강

-이상호 튜터님

상호 튜터님의 특강은 처음 들어봤는데 잔잔한 맛이 있는 강의였다. 이미 딥러닝이 완료된 라이브러리로 머신러닝을 돌려 사물인식을 하는 크게 어렵지 않았다. 다만 내가 직접 딥러닝을 통해 프로그램을 만들어야한다면 그땐 어려움을 많이 겪을 것 같아서 무섭다.

10.13 테스트 쪽지시험

- 이창호 튜터님

바로 전날에 배운 사물인식 기능을 활용한 테스트였다.

- opencv 활용

  1. 위 이미지를 다운받아 저장하세요
  2. opencv 로 이미지를 읽고 이미지의 가로, 세로가 각 몇 pixel 인지 구하세요
    1. (세로, 가로)
  3. 이미지에서 사람을 찾아 하얀색으로 네모를 그려서 result1.png 로 저장하세요
  4. 이미지에서 사람들을 잘라 people1.png, people2.png… 로 저장하세요
  5. 코드와 이미지를 git에 업로드하고 해당 repository를 공유해주세요

10.13 타임어택 테스트 답안 GitHub주소


result1.png

people1.png

people2.png

people3.png

people4.png

people5.png

테스트 진행중 문제 발생

Problem
그런데 막상 작성한 코드로 나온 결과물을 확인해보니 원하는 사람부분이 잘린게 아니라 엉뚱하게 잘려 있었다. 내가 코드작성을 잘못했나 싶어서 여러번 새로 작성해보고 범위지정도 다시해보고 구글링도 새로 해보았지만 해결이 되지않아 결국 튜터님께 여쭤보는게 가장 빠르겠다는 생각에 점심시간이 끝나자마자 튜터님께 질문을 했다.
Solution
늘 그랬듯이 해결법은 아주 쉬운것이었는데 x축 y축 순서로 범위를 지정해 둔 것을 y축 x축 순서로 범위를 지정했더니 바로 해결이 되었다. opencv에서는 y축 즉 높이를 먼저 두고 넓이를 두어야 하는 것이다. 일반적으로는 x축이 먼저오는 경우가 많다보니 이런 실수를 하고 만 것이다. 덕분에 이것만 수정하니 금방 해결되었다.

10.14 장고 타임어택 구현 테스트

목표

파이참의 프로젝트 생성 / 실행 기능 없이 명령어로 진행 하기

요구사항

1. 프로젝트 폴더를 생성하고 가상 환경을 생성 및 실행 해주세요

2. django 패키지를 설치하고, requirements.txt에 설치 된 패키지를 저장해주세요

3. sparta라는 이름으로 django 프로젝트를 생성해주세요

4. github에 새로운 리포지토리를 생성해주세요

5. .gitignore 설정 후 sparta 프로젝트를 푸시해주세요

6. user라는 이름의 브랜치를 생성하고 이동해주세요

7. user 앱을 만들고 settings.py에 등록해주세요

8. 아래 내용을 참고해 User 테이블을 생성해주세요

  • AbstractUser 상속
  • 핸드폰번호, 주소 필드 추가

9. 첨부 된 signup.html 템플릿을 활용해 /signup 경로로 접속할 경우 회원가입 페이지를 띄워주고 회원가입 기능을 구현해주세요(회원가입 시 로그인 페이지로 redirection 해주세요)

10. 첨부 된 login.html 템플릿을 활용해 /login 경로로 접속할 경우 로그인 페이지를 띄워주고 로그인 기능을 구현해주세요(로그인 시 home 페이지로 redirection 해주세요)

11. 첨부 된 home.html 템플릿을 활용해 /home 경로로 접속할 경우 메인 페이지를 띄워주고 로그인 하지 않은 사용자는 로그인 페이지로 접속하도록 해주세요

12. 작업 내용을 user 브랜치에 푸시하고, 메인 프렌치에 Pull Request를 요청해주세요

13. main 브랜치에서 user 브랜치의 작업 내용을 머지해주세요

타임어택 구현 테스트 답안 GitHub

주어진 시간은 1시간 30분이었고 1시간 정도만에 끝냈지만 GitHub에 올리는데 오류가 발생해 제출시간을 못맞출뻔 했다. 다른 작업을 할때는 이상이 없다가 하필 타임어택 테스트를 할 때 갑자기 오류가 생겨서 당황스러웠다. 하지만 계속 이상태로 했다가는 언젠가 생길 오류였고 차라리 빨리 발견되어서 다행이라고 생각한다. 엉뚱한데에서 시간을 많이 잡아먹었지만 결국 테스트는 시간안에 끝을 냈으니 좋은게 좋은거라고 그냥 넘어가려고 한다.

이번 주를 마치며

이 주의 마지막날인 금요일에 TIL,WIL 관련 특강이 있었는데 보고 여러가지 생각이 들었다. 지금까지 잘못 쓰고 있었던 것들에 대해 돌아보는 시간을 가졌고 이번주 까지는 이전 방식으로 작성하던 TIL이 많았기 때문에 이번주 까지는 기존의 WIL양식을 그대로 담습해서 작성하도록 하고 다음주부터는 개선된 양식으로 작성을 해보도록 하겠다.

profile
스파르타 내일배움캠프 3기 수강생 정형빈

0개의 댓글