2016년 2월 19일 금요일

가상환경 아래 패키지 설치 경로

Mac에서 Anaconda 설치 후에 가상 환경을 생성하고 여러 패키지들을 설치할 경우의 경로:

예를 들어 가상환경 tflearn 만들면 아래 경로가 생김.
home_directory/anaconda/envs/tflearn


만일 가상환경인 tflearn으로 들어와서 tensorflow 패키지를 설치한다면 아래 경로
home_directory/anaconda/envs/tflearn/lib/python2.7/site-packages/tensorflow
로 설치된다.


특정 폴더 아래에서 파일을 찾을 때는 그 위치로 가서 아래 명령 입력.
find . -name "tflearn" or "tflea*" 




2016년 2월 1일 월요일

(우분투 리눅스에서 파이썬) keras 코드 분석 예

파이썬에서 실행되는 DNN 툴 중에 keras 라는 것이 있습니다. keras 코드를 통해 python 명령 실행과 패키지 설치 폴더 구조와의 관계에 대해 분석해 봅시다.

keras 샘플 코드 중에 cifar10_cnn.py 라는 파일이 있는데 서로 다른 물체 10가지를 convolution net으로 분류해 내는 예제를 보여주는 코드입니다.
이 코드를 보면 헤드부에 아래와 같은 명령이 있습니다.

...
from keras.datasets import cifar10
...
# the data, shuffled and split between train and test sets
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
...


이 명령을 Ubuntu 리눅스의 경우에 대해 살펴 봅시다.

keras에서 cifar10을 학습하려면 먼저 cifar10의 database 파일을 다운받아야 합니다. 이를 위해 상기한 바와 같이 db 다운에 필요한 lib를 import 합니다.


그런데, 처음 keras를 설치할 때,

keras의 설치 위치는 미리 설정된 어떤 디폴트 설치 위치 아래에서의 keras이고 그 아래에 필요한 lib들이 설치 됩니다. 설정된 이 위치는
/usr/local/lib/python2.7/dist-packages입니다.

여기서 dist-는 배포(distribution) 패키지의 의미로 이 폴더 아래에 들어가 보면
python과 관련하여 그동안 설치한 다양한 패키지(numpy, pandas, Theano, sklearn, ...) 들의 폴더가 있습니다.
따라서 keras의 설치 위치도 여기이며
/usr/local/lib/python2.7/dist-packages/keras 처럼 됩니다.

이 위치를 찾아 keras 폴더에 들어가면 다시 datasets라는 폴더가 있고(즉, 위 코드에서 from keras.datasets 임) 다시 그 밑에 cifar10.py 파일(import cifar10 임)이 있습니다.


다음은 cifar10.py 코드입니다
==========================
from __future__ import absolute_import
from .cifar import load_batch
from .data_utils import get_file
import numpy as np
import os


def load_data():
    dirname = "cifar-10-batches-py"
    origin = "http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz"
    path = get_file(dirname, origin=origin, untar=True)

    nb_train_samples = 50000

    X_train = np.zeros((nb_train_samples, 3, 32, 32), dtype="uint8")
    y_train = np.zeros((nb_train_samples,), dtype="uint8")

    for i in range(1, 6):
        fpath = os.path.join(path, 'data_batch_' + str(i))
        data, labels = load_batch(fpath)
        X_train[(i-1)*10000:i*10000, :, :, :] = data
        y_train[(i-1)*10000:i*10000] = labels

    fpath = os.path.join(path, 'test_batch')
    X_test, y_test = load_batch(fpath)

    y_train = np.reshape(y_train, (len(y_train), 1))
    y_test = np.reshape(y_test, (len(y_test), 1))

    return (X_train, y_train), (X_test, y_test)
============================


위 코드의 앞 부분을 살펴보면 web상의 origin 주소에 있는 db 파일에 접근해서 data file을 다운하는 부분이 있습니다. python을 실행하고 한라인씩 입력하여 수행해 보면

파인썬 명령 쉘에서

>>dirname = "cifar-10-batches-py"
>>origin = "http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz"

를 입력 후, 다음으로 get_file 함수를 실행해야 하는데, 이 파일은 python의 기본 함수가 아닙니다.
함수를 찾아 보면 keras/datasets에 있는 data_utils.py코드 내에 있습니다. 따라서 이 함수를 사용하기 위해

>>from keras.datasets import data_utils

하면 됩니다.  data_utils를 import하였으므로

>>path = data_utils.get_file(dirname, origin=origin, untar=True)

처럼 입력하고, path를 출력해 보면

>>path
'/home/vis/.keras/datasets/cifar-10-batches-py'

입니다. 즉, 내 계정인 vis 아래에 .keras 폴더 아래에 다운받을 db파일이 저장 된다는 것을 알 수 있습니다.
따라서 cifar10_cnn.py파일의 앞 부분의 다운로드 부분을 실행해 본 후에 path가 가리키는 위치에 가보면


vis@vis-VirtualBox:~/.keras/datasets$ ls -la
합계 198956
drwxrwxr-x 3 vis vis      4096  2월  1 11:37 .
drwxrwxr-x 3 vis vis      4096  1월 27 11:43 ..
drwxr-xr-x 2 vis vis      4096  6월  5  2009 cifar-10-batches-py
-rw-rw-r-- 1 vis vis 170498071  2월  1 11:37 cifar-10-batches-py.tar.gz


와 같이 database파일이 다운되어 있는 것을 볼 수 있습니다.