SSAC X AIFFEL에서 진행하는 교육과정이 본격적으로 시작되었다.
저번 주가 '이렇게 진행될 거예요'의 느낌이었다면 이번 주의 느낌은 '본격적으로 살살 달려볼게요!'였다.
매주 금요일에 진행되는 글쓰기 시간을 통해 한 주간 공부했던 것을 간단하게 정리해보고자 한다.
[1주 차 정리]
1. Fundametals Node
◈ 인공지능 개발자가 되기 위한 위대한 첫걸음
Ubuntu(리눅스 기반 운영체제), Window 등의 운영체제에서 사용하는 터미널에 관해서 공부하고.
터미널에서 기본적으로 사용하는 단축키나 명령어들에 대해서 알아보았다. 그 후 가상 환경을 생성하고 삭제하는 것을 다뤘다.
명령어들을 확인하면 아래와 같다.
터미널 명령어
Ctrl+Alt+T : 터미널 열기
whoami : 컴퓨터의 유저 이름 출력
pwd(print working directory) : 현재 디렉토리 위치 출력
ls(list) : 현재 디렉토리 내의 모든 파일 또는 하위 디렉토리의 목록을 출력
ls -al : 숨김 파일까지 모두 출력
cd(change directory) : 현재 디렉토리 변경
cd .. : 현재 디렉토리의 상위 디렉토리로 이동
cd ~ : Home 디렉토리로 이동
mkdir(make direcory) 폴더이름 : '폴더이름'의 이름을 가진 디렉토리를 현재 디렉토리에 생성
rm(remove) -r 폴더이름 : '폴더이름'이의 이름을 가진 디렉토리 삭제
mv(move) A B: 뒤의 디렉토리(B)로 앞의 디렉토리(A) 이동
cp(copy) -r A B : 뒤의 디렉토리(B)에 앞의 디렉토리(A) 복사
sudo(Super User DO) : 관리자 권한으로 실행
◈ 개발자를 위한 첫 번째 필수 교양
이 노드에서는 코딩을 하는 사람이라면 필수적으로 다룰 수 있어야 하는 git, github 그리고 추가적으로 jupyter notebook을 다뤘다.
솔직히 git과 github는 알고 있었지만 알고만 있었기 때문에 막상 본격적으로 다뤄보려 했을 때 어려움을 많이 느꼈다.
분명 나는 노드랑 똑같이 한 것 같은데 문제가 발생하고 노드에서는 간단하게 하는 것 같은데 나는 잘 안 되는 느낌이었다.
그래도 덕분에 git과 github에 대해서 더 잘 알게 되었고, 그나마 조금 다룰 수 있게 된 것 같다. 더 잘 다루기 위해서 공부를 해야 할 것 같다.
내가 까먹지 않기 위해 공부 내용들을 정리해야겠다.
git은 프로젝트별로 버전을 각각 기록하여 저장하여 주는 시스템이다.
이를 통해 새로 작성한 코드에 오류가 발생하여 롤백해야 할 때 유용하게 써먹을 수 있다.
github는 Git을 통해 버전별로 관리되는 시스템을 웹사이트 기반으로 관리하는 시스템이다.
git명령어
git --version : git 버전 확인
sudo apt-get install git : 관리자 권한으로 git 설치
git init : git으로 현재 디렉토리의 변화를 기록 시작(저장소로 사용할 디렉토리에 들어가 있을 것)
echo "적을 내용" >> A.형식 : 'A'라는 이름에 형식이라는 형식을 가진 파일에 "적을내용"을 입력한 파일 생성
git status : 현재 버전 관리하고 있는 디렉토리에 변화가 있는가를 출력
git add : 변화된 내용을 기록할 것이라고 임시 사인
git commit : 변화된 내용을 기록하여 남겨둠
git remote add origin 주소 : 주소를 origin이라 칭한다.
git push origin master : 현재 디렉토리에 있는 정보들을 master라는 branch(작업을 하는 가지)에 올림
git clone repository주소 : (복사) 작업 컴퓨터를 바꾸거나 협업 시에 github에 올라와 있는 저장소를 내 작업 저장소로 가져올 때 사용
git pull origin master : 원격 저장소에 있는 내용들이 변경되었을 시 변경내용을 업데이트하는 명령어
git설치 및 버전 관리 프로세스
git 설치(sudo apt-get install git 활용) => github 계정 생성 도메인 설정 => github에 원격 저장소 만들기 =>
작업 컴퓨터에 로컬 저장소 만들기(init) 혹은 복제(clone) => 작업하기 => 작업한 내용 add, commit, push 하기 =>
협력업체 a github 업데이트 내용 pull => 협력업체 a 작업하기 => 협력업체 작업한 내용 add, commit, push 하기 =>
pull => 작업 => add, commit, push반복
git push 에러 발생할 경우
- fetch fist error / not-fast-forward error
blog.naver.com/patronymic/221617652075
- error:failed to push some refs to
우선 브랜치의 이름을 확인하고, 해당 브랜치의 이름을 넣거나 master를 main으로 대체한다.
작업하기 전에 pull을 하고 push를 하면 에러 발생이 적지 않을까 생각한다.
◈ 파이썬으로 코딩 시작하기
이 노드에서는 파이썬의 간단한 명령어들을 통해 코딩을 배웠다.
파이썬 같은 경우는 인터넷 강의도 좀 보긴 했었는데 내가 인터넷 강의로
30강 정도로 봐야 하는 것들을 아주 간단하고 이해하기 쉽게 배울 수 있었다.
마치 혼자 독학으로 끙끙대고 있는데 청담동 1타 강사의 수업을 듣게 된 느낌이었다.
노드로 공부하는 건 생각보다 재밌다.
2. Exploration Node
◈ 인공지능과 가위바위보 하기
시작은 MNIST(손글씨 dataset)으로 엄청 간단한 것처럼 보였다.
"데이터 준비 => 딥러닝 네트워크 설계 => 학습 => 테스트(평가)"의 과정이 힘들 거라고 생각하지 않았었다.
그런데 익숙하지 않은 코드들의 향연이 시작되면서 눈이 어지러워지고 다시 읽어보는 시간이 늘어났다.
그렇게 MNIST분류기를 만들어보는 시간을 가졌고, 그게 끝났을 때 본격적으로 어려워지는 느낌이었다.
데이터 준비부터 MNIST와는 많이 달랐다. 직접 가위 100장 바위 100장 보 100장을 찍어 데이터로 분류하였다.
그렇게 어찌어찌 분류기를 만들고 힘들었지만 보람찼어하고 테스트를 하는 순간 내 눈을 의심했다.
분명 학습 시에는 90~99%에서 놀던 정확도가 30~40%에서 놀고 있었다. 몇 번을 반복해도 마찬가지였다.
overfit 된 것이었다. 그때부터 300장이었던 dataset을 3300장으로 늘리고 그중 잘 찍은 사람 사진 300장을 testset으로
나머지 3000장을 trainset으로 정하고 학습시키기 시작했다. 사진을 일일이 확인하고 분류할 자신은 없어서
레이어의 개수를 늘려보고 뉴런수를 바꾸어보고 반복학습 횟수를 변경해보고 하면서 목표로 했던 60%를 넘겼다.
잘 된 건지는 아직도 의문이다. 다시 뜯어봐야 할 것 같다.
◈ Iris의 세 가지 품종 분류하기(feat.digit, wine, breast_cancer)
직전의 노드에서 고통을 받았더니 이번 노드에서는 그래도 나름 할만했던 것 같다.
"데이터 준비 => 딥러닝 네트워크 설계 => 학습 => 테스트(평가)"의 과정을 이해할 수 있었다.
이번에는 dataset을 사이킷런(scikit-learn)에서 가져와서 사용하였다.
외부에서 데이터를 가져와서 그런진 모르겠지만 데이터들을 꼼꼼하게 살펴보면서 진행하였다.
덕분에 data의 개수와 feature, label에 대해 이해하게 되었다.
feature : 문제지. 러신 모닝 모델에 입력되는 데이터
label : 정답지. 러신 모닝 모델이 맞춰야 하는 데이터
그렇게 데이터들을 확인한 후 Decision Tree, Random Forest, SVM, SGD Classifier, Logistic Regression의 모델들을 통해
학습시키고 결과들을 비교했다. 비교 결과도 생각보다 재밌었다. data의 개수가 모델에게 끼치는 영향을 확인한 것 같은 느낌이었다.
앞으로 진행될 노드들이 기대되는 한주였다.
digit, wine, breast_cancer classifier github
'[SSAC X AIFFEL]' 카테고리의 다른 글
[6주차]SSAC X AIFFEL (02.01~02.05) (0) | 2021.02.06 |
---|---|
[5주차]SSAC X AIFFEL (01.25~01.29) (0) | 2021.01.29 |
[4주차]SSAC X AIFFEL (01.18~01.22) (0) | 2021.01.22 |
[3주차]SSAC X AIFFEL (01.11~01.15) (1) | 2021.01.15 |
[SSAC X AIFFEL]앞으로의 목표 (2) | 2020.12.31 |