텐서플로우 첫걸음이라고 하지만.....
개발환경 세팅 먼저.... 진행하도록 하겠다.
Tensorflow 개발환경 세팅(Docker 이용)
1. 도커 이미지 받기
Dockerhub에서 dash00이란 사람이 만든 tensorflow-python3-jupyter 이미지를 받아옴
1 2 | # 이미지 받아오기 docker pull dash00/tensorflow-python3-jupyter | cs |
* 도커 이미지를 잘 받아왔는지 확인하려면 [docker images]
2. 도커 이미지를 컨테이너로 생성
1 2 3 | # 도커 이미지를 통해 컨테이너 생성 # -p 로컬호스트포트:컨테이너포트 -v 로컬저장소:컨테이너저장소 -it 콘솔 입출력 설정 --name 컨테이너 이름 도커허브 이미지경로 bash모드로 시작 docker run -p 8888:8888 -v /Users/mac/study/jupyter:/notebooks -it --name py3_tf_notebook dash00/tensorflow-python3-jupyter bash | cs |
* 도커 컨테이너가 잘 올라갔는지 확인하려면 [docker container ls --all]
3. pip3로 tensorflow 라이브러리 업그레이드
1 2 | # bash 모드에서 pip3를 통해 tensorflow 업그레이드 pip3 install --upgrade tensorflow | cs |
4. jupyter notebook 실행
/run_jupyter.sh --allow-root --NotebookApp.token=''
브라우저에서 다음 주소를 치면 웹 가상환경에서 개발할 수 있는 jupyter notebook이 실행된다.
http://localhost:8888/
5. 컨테이너 중지 했다가 다시 실행할 때
1 2 3 4 | # 컨테이너 재시작 docker restart [컨테이너 이름 또는 ID] docker restart py3_tf_notebook # 컨테이너 shell 창으로 재시작(컨테이너가 돌아가고 있는 상태에서 실행) docker attach py3_tf_notebook | cs |
/run_jupyter.sh --allow-root --NotebookApp.token=''
다음 명령어는 docker restart [컨테이너 이름 또는 ID] 실행 후에 입력하면 attach 명령어 없이 jupyter를 실행할 수 있다.
1 2 | # 컨테이너 shell모드 실행하는 동시에 jupyter 실행 docker exec py3_tf_notebook /run_jupyter.sh --allow-root --NotebookApp.token='' | cs |
6. 컨테이너 변경사항을 이미지화 하고 싶을 때
1 2 | # 컨테이너 이미지화 docker container commit [컨테이너 이름 또는 ID] [저장할 이미지이름] docker container commit py3_tf_notebook py3_tf_jupyter | cs |
무언가 큼직한 변화가 생겼을 때(패키지 업그레이드나 추가적으로 애플리케이션의 수정이 있을때)
컨테이너를 commit 해주지 않으면 컨테이너를 다시 실행했을때 본래 상태로 Rollback 해버린다.
변경사항을 저장해 다음번에도 같은 환경을 유지하고 싶을때는 해당 컨테이너 commit 명령어로 이미지를 갱신해주자.
이렇게 Docker에서 jupyter 개발 환경 세팅은 완료 되었고 학습과정에서는
Pandas 라이브러리를 선행 학습해야 한다.
Pandas 학습하기
Pandas의 기본을 학습하는데 직관적이게 이해를 하기 위해 기존 자료형들과 연관지어 설명하겠다.
먼저 Pandas에서 다루어지는 데이터 구조는 DataFrame과 Series 이다.
DataFrame은 R에서도 본 적이 있는데 쉽게 말해 테이블이다. 테이블을 DataFrame이란 클래스로 객체화 시킨 개념이라 보면 된다.
Series는 Column(열)이라고 하는데 리스트 구조와 거의 동일하다. Series가 모여 DataFrame이 되는 것이기 때문에
결국 DataFrame은 2차원 배열의 리스트라고 볼 수도 있겠다.
개인적으로 DataFrame을 써보니 굉장히 편하단 생각이 많이 든다.
csv 파일을 조작하는데 있어 DataFrame은 최적화 된 데이터 구조이다.
더군다나 우리가 이해하는데 있어 직관적이기까지 하니 학습하는데도 적은 시간으로 고효율을 이끌어 낼 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # pandas 라이브러리 불러오기 import pandas as pd # 캘리포니아 주택 데이터 csv 파일 불러와서 데이터프레임 변수로 저장 california_housing_dataframe = pd.read_csv("https://storage.googleapis.com/mledu-datasets/california_housing_train.csv", sep=",") # DataFrame 안의 데이터가 어떤 것들이 있는지 머리 부분 일부만 확인 california_housing_dataframe.head() # dictionary로 DataFrame 생성하기 friend_dict_list = [{'name': 'Jone', 'age': 20, 'job': 'student'}, {'name': 'Jenny', 'age': 30, 'job': 'developer'}, {'name': 'Nate', 'age': 30, 'job': 'teacher'}] df = pd.DataFrame(friend_dict_list) | cs |
DataFrame은 Table (엑셀을 생각하면 된다)
Series는 List (Column(열)이다. 열이 모여 Table이 생성된다)
Dictionary는 JSON 객체와 유사한 구조를 가지고 있다.
이렇게 Pandas에서 다루는 데이터 구조를 이해하는게 가장 중요하다.
텐서플로우 첫걸음: 도구
다음 그림은 텐서플로우 도구함의 현재 계층구조를 보여 줍니다.
에스티메이터(tf.estimator) |
높은 수준의 OOP API |
tf.layers/tf.losses/tf.metrics |
일반 모델 구성요소용 라이브러리 |
텐서플로우 |
낮은 수준의 라이브러리 |
머신러닝 단기집중과정에서 다루는 실습에서는 대부분 에스티메이터를 사용한다고 한다.
굳이 복잡한 내부 알고리즘을 정확하게 알 필요 없이 함수 형태의 라이브러리를 가져와 사용하면서
결과값을 보며 학습하는데 집중을 하는 것 같다.
이번 학습을 통해 느끼게 된 것들은....
1. 내가 인공지능을 학습시킨다 해서 내부 알고리즘에 대해 전부 다 학습할 필요는 없음.
오히려 알고리즘에 너무 집착하여 학습하다 보면 학습기간이 길어짐과 동시에 흥미를 잃을 수 있다 판단됨.
2. 텐서라는 개념이 아직도 와닿지가 않음. 아직 첫걸음의 학습진도라고 하지만 의외로 난이도가 좀 있는 편.
3. 용어학습의 중요성. 한국말로 아무리 번역해놨더라도 용어가 익숙하지 않아 문장을 이해하는데 딜레이가 좀 생김.
대부분 용어들 때문에 다시 구글링 하며 지식을 습득하고는 있지만,
좀 더 직관적인 이해를 돕기 위해 주요 용어들에 대해 시각화 학습을 해줬으면 하는 바램이 있음.
'Machine Learning' 카테고리의 다른 글
머신러닝 단기집중과정 - 손실 줄이기 (0) | 2018.07.18 |
---|---|
머신러닝 단기집중과정 - 선형 회귀 (0) | 2018.07.17 |
머신러닝 단기집중과정 - 주요 머신러닝 용어 (0) | 2018.07.17 |
머신러닝에 관심을 가지기 시작하면서..... (0) | 2018.07.17 |