2017년 1월 5일 목요일

cs231n Convolutional Neural Network for Visual Recognition - 시작하기 (환경설정)

Machine learning 공부를 기초부터 하기 좋은 자료로 stanford의 cs231n 강의가 있습니다. 아주 최근 강좌(2016 winter)까지도 youtube에 공개되어있고 상당히 친절한 강의라서 시작하는 사람들에게 추천해주기 딱 좋습니다.

사이트에 course lecture note들도 아주 충실하고 실제로 assignment들을 다운받아 기본적인 개념에 대한 코딩을 직접해볼 수도 있는데다 워낙 유명한 강의라 이미 다른 사람들이 시도한 solution들도 쉽게 찾아볼 수 있어서 혼자 공부하기에 최적의 강의라고 생각합니다.

그래서 기초를 다질 겸, 나도 한 번 처음부터 material들을 읽고 숙제들을 하나씩 해봐야겠다는 생각을 하고 시작해봤는데...이게 은근히 '시작' 자체를 하기 위해서 필요한 환경설정이 필요해서 조금 고생했습니다 (레딧에서도 내가 겪은 류의 어려움에 대해 질문하는 글들이 있는 걸 보면 나만 그런 것도 아니다...).

딱히 거창한 것은 아니지만 의욕을 가지고 공부를 하려했는데 이래저래 환경설정으로 막히면 힘이 빠질 수 밖에 없죠 (뭐든지 환경설정이 제일 짜증난다.).
그렇다고 또 어떻게 하면 좋을 지 일괄적으로 정리해 둔 자료는 아무리 찾아봐도 없기에 아예 '무조건 따라하기' 방식으로 내가 환경 설정한 것들을 정리해보았습니다 (윈도우 OS 기준).

1. 먼저 사이트의 글을 읽습니다! 
1번 숙제를 하기 위해 http://cs231n.github.io/assignments2016/assignment1/에 들어가면 setup을 하는 법이 꽤 친절히 나와있는 편입니다. 터미널을 사용하는 법에 대해 먼저 소개가 되어있는데 우리는 스탠포드 학생이 아니고 숙제를 다운받아 개별적으로 해볼 것이기 때문에 'Working locally' 항목을 보면 되겠습니다.

먼저 시키는대로 먼저 code zip 파일을 다운 받고, 옵션이 2가지가 주어지는데, 그 중 저는 아나콘다를 사용했습니다. 사이트에서도 이 방법을 추천하는데 아나콘다를 깔고 사용하면 각종 환경설정을 하는 것이 훨씬 간단하고 수월해지기 때문입니다(...라고 설명합니다 ***).

* 사실 파이썬을 모르면 아나콘다도 뭔가 싶은데 이건 그냥 파이썬을 사용하기 위해 편하게 해주는 일종의 도구라고 생각하면 됩니다. 아나콘다에 대한 설명과 까는 방법은 이 글의 목적을 벗어나기 때문에 다음 링크로 갈음하겠습니다. (http://bigdatapy.tistory.com/105)
** 아나콘다에 파이썬 버전을 선택할 수 있는데 저는 3.5버전을 선택했습니다.
*** "Once you install it you can skip all mentions of requirements and you’re ready to go directly to working on the assignment."라고 적혀있지만 정말 그랬으면 내가 이 고생을 했을리가 없지... 

2. Jupyter notebook 설치
다운받은 code zip을 원하는 곳에 풀고 주소를 기억해둡니다.
cmd창을 킨 다음, conda install jupyter 해서 jupyter notebook이란 것을 사용할 수 있도록 설치를 하겠습니다.


저는 이미 깔려있기 때문에 이미 설치가 되어있다는 메시지가 뜹니다. Jupyter notebook은 내 노트북에서 웹페이지를 기반으로 local하게(인터넷이 되지 않아도) python code를 수정하고 실행해볼 수 있게 해줍니다. 기본적으로 모든 assignment 문서가 notebook으로 작성, 실행해보고 제출하게 되어있기 때문에 필수적인 도구입니다.

3. python 2.7버전 가상환경 만들어주기 
cs231n 사이트는 python을 잘 모르는 사람들을 위한 tutorial를 제공합니다. 그 tutorial에도 나와있지만 강좌에서 사용하는 모든 코드는 파이썬 2.7버전에서'만' 돌아가게 되어있습니다. 

웃긴게 프로그램이든 언어든 버전이 한 단계 올라가면 앞에 버전들을 잘 포괄해서 가져가는 것이 보통인데 파이썬은 3.~버전이 2.~버전과 사용하는 문법이 매.우. 다르죠. 따라서 아나콘다를 파이썬 3.5 버전으로 깐 우리는 jupyter notebook에서 python2 kernel로 돌아가게 하기 위해 새로이 환경을 설정해줘야합니다. 
---
There are currently two different supported versions of Python, 2.7 and 3.4. Somewhat confusingly, Python 3.0 introduced many backwards-incompatible changes to the language, so code written for 2.7 may not work under 3.4 and vice versa. For this class all code will use Python 2.7.
You can check your Python version at the command line by running python --version.
---

* 처음부터 아나콘다를 버전에 맞게 설치해주면 되지 않느냐? 하는 사람들은 ... 음 그래도 됩니다. 근데 제가 그렇게 해보지 않았고.... 
** 아나콘다를 파이썬 3.5 버전으로 깔았다고 해도 그냥 중복으로 아나콘다 파이썬 2.7버전을 또 깔면 되는 것이 아니냐? 하실 수 있는데 그러면 안 됩니다. 그냥 설치를 하면 충돌이 난다고 하네요(http://conda.pydata.org/docs/py2or3.html#create-a-python-2-7-environment).

바로 위에 소개한 링크의 글이 알려주는대로만 하면 가상환경 설정이 끝나고 아마도 아무 문제 없이 jupyter notebook에서 코드들이 실행될 것입니다만.... 그래도 무조건 따라하기 형식이니 한 스텝씩 여기에 정리해보겠습니다.

실행창에 
conda create -n py27 python=2.7 anaconda
라고 치면 가상환경의 이름을 py27이라고 만들어줄 것이고 (맘대로 바꿀 수 있다) 설치 후 내가 가지고 있는 가상환경을 다 확인해보고 싶다면
conda info --envs
라고 치면 목록이 쭉 나옵니다. (그 중에 새로 만든 py27이 포함되있는 것을 확인할 수 있습니다.)

이제 만들 가상환경으로 들어가고 싶으면, 
activate py27
이라고 치면 실행창에서 (py27) C:\Users\Jaejun Yoo> 와 같이 앞에 (py27)이 붙는 것을 볼 수 있습니다. 
이제 우리는 python 2.7 버전을 사용하는 가상환경에 들어와 있는 것입니다. 아마도 아나콘다를 2.7버전으로 깔았고 python 3.5 버전이 필요할 경우에도 비슷한 방식으로 할 수 있을 것으로 보입니다. 

4. Jupyter notebook 켜기
단순한 것인데 처음인 사람들은 당황할 수 있는 것이 jupyter notebook을 키는 것입니다. 그냥 명령창을 켜서
jupyter notebook
이라고 치면 내가 원하는 곳이 아닌 'C:\Users\Jaejun Yoo'과 같은 Default 폴더에서 notebook이 실행되는 것을 볼 수 있습니다. 따라서 아까 기억해뒀던 code zip을 풀은 directory 주소로 들어가서(cd ~), jupyter notebook을 켜면 이제 내가 풀고 싶은 assignment1 'knn.ipynb'를 열어서 시작할 수 있는 것을 볼 수 있습니다. 
여기서 말하는 jupyter notebook은 강의에서 제공하는 tutorial 글 중 IPython notebook 사용법과 동일하니 참고하시면 됩니다. 

5. 데이터 받기
마지막으로 데이터를 받아야하는데..!
Download data: Once you have the starter code, you will need to download the CIFAR-10 dataset. Run the following from the assignment1 directory:
cd cs231n/datasets
./get_datasets.sh
윈도우 OS기반이기 때문에 bash shell을 다음과 같이 명령창에서 직접 수행 할 수가 없습니다. (다른 우회적 방법은 있겠지만) 하지만 .sh 파일이 해주는 것이 그냥 링크로 접근하여 다운로드를 시키는 것이므로 해당 get_datasets.sh 파일을 txt 파일로 읽어 링크만 따오면 됩니다. 아마 다음과 같이 보일텐데... 
즉, http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 이 링크를 들어가면 알아서 다운로드가 진행됩니다. cs231n/datasets 폴더 안에 .tar 파일을 받아서 zip 파일 풀 듯이 풀어주면 됩니다. 

6. 기타
혹시나 이러고서도 'knn.ipynb'에서 error가 난다면 보통 패키지가 import가 안 되어 있는 경우일 것으로 보입니다. 흔히 다음과 같이 에러 메시지가 뜨는데
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-3-6d53d297f0cc> in <module>()
3 import random
4 import numpy as np
----> 5 from cs231n.data_utils import load_CIFAR10
6 import matplotlib.pyplot as plt
7
D:\DaumCloud\[3] Study\[0] cs231n CNN for visual recognition - stanford\assignment1\cs231n\data_utils.py in <module>()
2 import numpy as np
3 import os
----> 4 from scipy.misc import imread
5
6 def load_CIFAR_batch(filename):
ImportError: No module named scipy.misc

이 때는 그냥 conda install (없다는 package 이름) 해주면 되겠습니다. 

그러면 모두들 즐거운 공부하시길~

* 만약 이래도 안 되는 것이 있다면 댓글을 남겨주세요 제가 아는 범위라면 최대한 도와드리려고 노력해보겠습니다.



댓글 21개:

  1. https://www.coursera.org/learn/machine-learning/home/welcome
    전 이거 2주차 진행하고 있습니다.
    요거 끝나면, 이거 들어보고 싶네욥 ^^

    답글삭제
    답글
    1. YeonHo Park님 안녕하세요 댓글 감사합니다ㅎㅎ맞아요 Ng 교수님의 수업도 쉽고 처음 듣기에 좋지요ㅎ 저도 들어봤습니다. 다른 분들께도 추천합니다.

      삭제
  2. Inspiring writings and I greatly admired what you have to say , I hope you continue to provide new ideas for us all and greetings success always for you..Keep update more information..
    Python Training in Chennai

    답글삭제
  3. It is amazing and wonderful to visit your site.Thanks for sharing this information,this is useful to me...
    Android Training in Chennai
    Ios Training in Chennai

    답글삭제
  4. Great post.Thanks for one marvelous posting! I enjoyed reading it;The information was very useful.
    QTP Training in Chennai
    Java Training in Chennai
    Python Training in Chennai

    답글삭제
  5. The young boys ended up stimulated to read through them and now have unquestionably been having fun with these things.
    Best selenium training Institute in chennai

    답글삭제
  6. Thanks for posting this info. I just want to let you know that I just check out your site and I find it very interesting and informative. I can't wait to read lots of your posts
    Hadoop Training in Chennai

    Hadoop Training in Bangalore

    Big data training in tambaram

    Big data training in Sholinganallur

    Big data training in annanagar

    Big data training in Velachery

    답글삭제
  7. Your good knowledge and kindness in playing with all the pieces were very useful. I don’t know what I would have done if I had not encountered such a step like this.
    Devops Training in Chennai

    Devops Training in Bangalore

    Devops Training in pune

    답글삭제
  8. Inspiring writings and I greatly admired what you have to say , I hope you continue to provide new ideas for us all and greetings success always for you..Keep update more information..

    rpa training in Chennai | rpa training in pune

    rpa training in tambaram | rpa training in sholinganallur

    rpa training in Chennai | rpa training in velachery

    rpa online training | rpa training in bangalore

    답글삭제
  9. Superb. I really enjoyed very much with this article here. Really it is an amazing article I had ever read. I hope it will help a lot for all. Thank you so much for this amazing posts and please keep update like this excellent article. thank you for sharing such a great blog with us.

    java training in tambaram | java training in velachery

    java training in omr | oracle training in chennai

    답글삭제
  10. Wonderful article. Thanks for writing this type of article. Kindly Visit Us @ Rigid box

    답글삭제
  11. Thanks for the good words! Really appreciated. Great post. I’ve been commenting a lot on a few blogs recently, but I hadn’t thought about my approach until you brought it up. 
    angularjs Training in btm

    angularjs Training in electronic-city

    angularjs online Training

    angularjs Training in marathahalli

    angularjs interview questions and answers

    답글삭제
  12. Information from this blog is very useful for me, am very happy to read this blog Kindly visit us @ Coimbatore Christmas Gift boxes | Wallet Box

    답글삭제