CNN(Convolutional Neural Network)으로 이미지 분류 모델링할 때 보통 tensorflow나 keras 라이브러리에 이미 포함되어 있는 MNIST, CIFAR-10 같은 이미지를 간단하게 load 하는 함수를 이용해서 toy project로 연습을 해보셨을 겁니다. 

그런데, 실제 이미지, 그림 파일을 분석해야 될 경우 '어? 이미지를 어떻게 업로드 하고, 어떻게 전처리하며, 어떻게 시각화해야 하는거지?'라는 의문을 한번쯤은 가져보셨을 듯 합니다. 

이번 포스팅에서는 바로 이 의문에 대한 답변 소개입니다. 


필요한 Python 라이브러리를 불러오겠습니다. 

 import numpy as np

 import pandas as pd

 import matplotlib.pyplot as plt

 import keras 



 1. 개와 고양이 사진 다운로드 (download dogs and cats images from Kaggle)

개와 고양이 사진을 아래의 Kaggle 사이트에서 다운로드 해주세요. Kaggle 회원가입을 먼저 해야지 다운로드 할 수 있습니다. 개는 1, 고양이는 0으로 라벨링이 되어 있는 25,000 개의 이미지를 다운받을 수 있습니다. 

https://www.kaggle.com/c/dogs-vs-cats/data



2. 개와 고양이 이미지 30개만 선택해서 별도 경로(폴더)에 복사하기


downloads 폴더에 들어있는 압축된 다운로드 파일을 압축 해제(unzip)해 주세요. 


윈도우 탐색기로 미리보기를 해보면 고양이 반, 개 반 입니다. 


directory, path 관리하는데 필요한 os 라이브러리, 파일을 source에서 destination 경로로 복사하는데 필요한 shutil 라이브러리를 불러오겠습니다. 

 import os # miscellaneous operating system interfaces

 import shutil # high-level file operations


이미지를 가져올 경로를 설정해보겠습니다. ('Downdoads/dogs-vs-cats/train' 경로에 train 폴더를 압축해제해 놓았습니다. 폴더 경로 확인 요함.)

# The path to the directory where the original dataset was uncompressed

 base_dir = '/Users/admin/Downloads'

 img_dir = '/Users/admin/Downloads/dogs-vs-cats/train'


train 폴더에 들어있는 개와 고양이 이미지가 총 25,000개 임을 확인했으며,  img_dir 경로에 포함되어 있는 이미지 중에서 10개만 indexing 해서 파일 제목을 확인해보았습니다. 

 len(os.listdir(img_dir))

 25000

os.listdir(img_dir)[:10]

['dog.8011.jpg',
 'cat.5077.jpg',
 'dog.7322.jpg',
 'cat.2718.jpg',
 'cat.10151.jpg',
 'cat.3406.jpg',
 'dog.1753.jpg',
 'cat.4369.jpg',
 'cat.7660.jpg',
 'dog.5535.jpg']


30개의 이미지만 샘플로 선별해서 다른 폴더로 복사해보겠습니다. 먼저, 30개 고양이 이미지를 담아둘 경로/ 폴더(cats30_dir) 를 만들어보겠습니다. 

# Directory with 30 cat pictures

 cats30_dir = os.path.join(base_dir, 'cats30')


 # Make a path directory

 os.mkdir(cats30_dir)


이제 source 경로에서 destination 경로로 shutil.copyfile(src, dst) 함수를 사용하여 고양이 이미지 30개만 이미지를 복사하겠습니다.  

# Copy first 30 cat images to cats30_dir

 fnames = ['cat.{}.jpg'.format(i) for i in range(30)]

 

 for fname in fnames:

     src = os.path.join(img_dir, fname)

     dst = os.path.join(cats30_dir, fname)

     shutil.copyfile(src, dst)


cats30_dir 경로로 복사한 30개의 고양이 이미지 파일 목록을 확인해 보았습니다. 

# check if pictures were copied well in cats30 directory

 os.listdir(cats30_dir)

['cat.6.jpg',
 'cat.24.jpg',
 'cat.18.jpg',
 'cat.19.jpg',
 'cat.25.jpg',
 'cat.7.jpg',
 'cat.5.jpg',
 'cat.27.jpg',
 'cat.26.jpg',
 'cat.4.jpg',
 'cat.0.jpg',
 'cat.22.jpg',
 'cat.23.jpg',
 'cat.1.jpg',
 'cat.3.jpg',
 'cat.21.jpg',
 'cat.20.jpg',
 'cat.2.jpg',
 'cat.11.jpg',
 'cat.10.jpg',
 'cat.12.jpg',
 'cat.13.jpg',
 'cat.9.jpg',
 'cat.17.jpg',
 'cat.16.jpg',
 'cat.8.jpg',
 'cat.28.jpg',
 'cat.14.jpg',
 'cat.15.jpg',
 'cat.29.jpg']



 3. 이미지 파일을 로딩, float array 로 변환 후 전처리하기
    (load image file and convert image data to float array format) 

Keras preprocessing 에 있는 image 클래스를 불러온 후, load_img() 함수를 사용해서 이미지 파일을 로딩하고, img_to_array() 함수를 사용해서 array 로 변환해보겠습니다. (Python OpenCV 라이브러리로도 가능함)

# a picture of one cat as an example

 img_name = 'cat.10.jpg'

 img_path = os.path.join(cats30_dir, img_name)


 # Preprocess the image into a 4D tensor using keras.preprocessing

 from keras.preprocessing import image


 img = image.load_img(img_path, target_size=(250, 250))

 img_tensor = image.img_to_array(img)


3차원 array에 이미지 샘플을 구분할 수 있도록 np.expand_dims() 함수를 사용하여 1개 차원을 추가하겠습니다. 그리고 [0, 1] 값 범위 내에 값이 존재하도록 array 값을 255.로 나누어서 표준화해주었습니다. 

  # expand a dimension (3D -> 4D)

 img_tensor = np.expand_dims(img_tensor, axis=0)

 img_tensor.shape

 (1, 250, 250, 3)

 

 # scaling into [0, 1]

 img_tensor /= 255.


첫번째 고양이 이미지의 array 데이터를 출력해보면 아래처럼 생겼습니다. 꼭 영화 메트릭스의 숫자들이 주루룩 내려오는 장면 같이 생겼습니다. 

img_tensor[0]

array([[[0.10196079, 0.11764706, 0.15294118],
        [0.07450981, 0.09019608, 0.1254902 ],
        [0.03137255, 0.04705882, 0.09019608],
        ...,
        [0.5058824 , 0.6313726 , 0.61960787],
        [0.49411765, 0.61960787, 0.60784316],
        [0.49019608, 0.6156863 , 0.6039216 ]],

       [[0.11764706, 0.13333334, 0.16862746],
        [0.13725491, 0.15294118, 0.1882353 ],
        [0.08627451, 0.10196079, 0.13725491],
        ...,
        [0.50980395, 0.63529414, 0.62352943],
        [0.49803922, 0.62352943, 0.6117647 ],
        [0.4862745 , 0.6117647 , 0.6       ]],

       [[0.11372549, 0.14117648, 0.16470589],
        [0.16470589, 0.19215687, 0.22352941],
        [0.15294118, 0.18039216, 0.21176471],
        ...,
        [0.50980395, 0.63529414, 0.62352943],
        [0.5019608 , 0.627451  , 0.6156863 ],
        [0.49019608, 0.6156863 , 0.6039216 ]],

       ...,

       [[0.69411767, 0.6431373 , 0.46666667],
        [0.6862745 , 0.63529414, 0.45882353],
        [0.6627451 , 0.6117647 , 0.4392157 ],
        ...,
        [0.7254902 , 0.70980394, 0.04313726],
        [0.6745098 , 0.6509804 , 0.03921569],
        [0.64705884, 0.6156863 , 0.05490196]],

       [[0.64705884, 0.5921569 , 0.45490196],
        [0.6117647 , 0.5568628 , 0.4117647 ],
        [0.5686275 , 0.5176471 , 0.3529412 ],
        ...,
        [0.7254902 , 0.7137255 , 0.01960784],
        [0.6862745 , 0.67058825, 0.00784314],
        [0.6509804 , 0.6313726 , 0.        ]],

       [[0.6039216 , 0.54901963, 0.4117647 ],
        [0.5882353 , 0.53333336, 0.3882353 ],
        [0.5803922 , 0.5294118 , 0.3647059 ],
        ...,
        [0.7254902 , 0.7137255 , 0.01960784],
        [0.6862745 , 0.67058825, 0.00784314],
        [0.6509804 , 0.6313726 , 0.        ]]], dtype=float32)



  4. 한개의 이미지 파일의 array 를 시각화하기 (visualizing an image array data)

matplotlib 라이브러리를 이용하여 위의 3번에서 이미지의 array 변환/ 전처리한 데이터를 시각화해보겠습니다. 예제로서 img_tensor[0] 으로 첫번째 고양이 이미지의 데이터를 시각화했습니다. 

# Image show

 import matplotlib.pyplot as plt

 plt.rcParams['figure.figsize'] = (10, 10) # set figure size

 

 plt.imshow(img_tensor[0])

 plt.show()




  5. 30개의 이미지 데이터를 6*5 격자에 나누어서 시각화하기 
    (visualizing 30 image data at 6*5 grid layout)

위의 3번에서 했던 이미지 파일 로딩, array로 변환, 1개 차원 추가, [0, 1] 범위로 표준화하는 전처리를 preprocess_img() 라는 이름의 사용자정의함수(UDF)로 만들었습니다. 

# UDF of pre-processing image into a 4D tensor

 def preprocess_img(img_path, target_size=100):

     from keras.preprocessing import image

     

     img = image.load_img(img_path, target_size=(target_size, target_size))

     img_tensor = image.img_to_array(img)

    

     # expand a dimension

     img_tensor = np.expand_dims(img_tensor, axis=0)

     

     # scaling into [0, 1]

     img_tensor /= 255.

     

     return img_tensor


이제 30개의 고양이 이미지 array 데이터를 사용해서 행(row) 6개 * 열(column) 5개의 격자 배열(grid layout) 에 시각화를 해보겠습니다. 이때 가독성을 높이기 위해서 고양이 사진 간에 검정색 구분선을 넣어서 시각화를 해보겠습니다. 

참고로, 아래 코드의 for loop 중간에 방금 전에 위에서 정의한 preprocess_img() 사용자정의함수 (빨간색으로 표기) 가 사용되었습니다. 

# layout

n_pic = 30

n_col = 5

n_row = int(np.ceil(n_pic / n_col))


# plot & margin size

target_size = 100

margin = 3


# blank matrix to store results

total = np.zeros((n_row * target_size + (n_row - 1) * margin, n_col * target_size + (n_col - 1) * margin, 3))


# append the image tensors to the 'total matrix'

img_seq = 0


for i in range(n_row):

    for j in range(n_col):


        fname = 'cat.{}.jpg'.format(img_seq)

        img_path = os.path.join(cats30_dir, fname)


        img_tensor = preprocess_img(img_path, target_size)


        horizontal_start = i * target_size + i * margin

        horizontal_end = horizontal_start + target_size

        vertical_start = j * target_size + j * margin

        vertical_end = vertical_start + target_size


        total[horizontal_start : horizontal_end, vertical_start : vertical_end, :] = img_tensor[0]

        

        img_seq += 1


# display the pictures in grid

plt.figure(figsize=(200, 200))

plt.imshow(total)

plt.show()


많은 도움이 되었기를 바랍니다. 

이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요. 


Posted by R Friend R_Friend

댓글을 달아 주세요

이번 포스팅에서는 그래픽카드 확인하는 방법, Tensorflow와 Keras가 GPU를 사용하고 있는지 확인하는 방법, GPU 사용율 모니터링하는 방법을 알아보겠습니다. 



아래는 Windows10 기준의 설명입니다. 



  1. 컴퓨터 그래픽 카드가 NVIDIA Graphics Card 인지 확인하는 방법


키보드에서 'Windows로고 + R'을 누르거나, 마우스 오른쪽으로 'Windows로고'를 선택한 후 '실행(R)'을 선택하면 아래처럼 '실행' 창이 나타납니다. 이 실행창의 열기(O) 칸에 'dxdiag'를 입력하고 '확인'을 누릅니다. 




그러면 아래처럼 'DirectX 진단 도구' 화면이 나타납니다. 여기서 '디스플레이1' 메뉴를 선택하면 그래픽카드를 볼 수 있습니다. 제조업체가 NVIDIA 인지 확인하고, CUDA, CUDNN 지원하는지 확인합니다. 





  2. Tensorflow, Keras코드가 GPU에서 돌아가고 있는지 확인하는 방법


Nvidia GPU 그래픽카드가 설치되어 있는 컴퓨터에 (0) Visual Studio 설치, (1) CUDA 설치, (2) CUDNN 설치, (3) Anaconda 설치, (4) 가상환경 생성 및 tensorflow-gpu 설치, (5) Jupyter notebook에 가상환경 커널 추가 등의 작업을 마쳤다면 GPU를 사용하여 딥러닝 모델을 훈련시킬 수 있습니다. 


* Windows10 환경에서 tensorflow gpu 설치 참고: https://smprlab.tistory.com/21


Tensorflow, Keras코드가 GPU에서 돌아가는지 아니면 CPU에서 돌아가고 있는지 확인하는 방법은 아래와 같습니니다. 



import numpy as np

import pandas as pd


import keras

import tensorflow as tf

from IPython.display import display

import PIL

 



# How to check if the code is running on GPU or CPU?

from tensorflow.python.client import device_lib

print(device_lib.list_local_devices())

[name: "/cpu:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 4800764240957379342
, name: "/gpu:0"
device_type: "GPU"
memory_limit: 6814913823
locality {
  bus_id: 1
}
incarnation: 14858485129082007400
physical_device_desc: "device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0"
]

 



# How to check if Keras is using GPU?

from keras import backend as K

K.tensorflow_backend._get_available_gpus()


['/gpu:0']

 




  3. 딥러닝 모델 훈련 시 GPU 사용율 확인하는 방법


'Windows로고'에 마우스 오른쪽 클릭을 한 후, 아래의 메뉴화면에서 '작업 관리자(T)'를 선택합니다. 




그러면, 아래처럼 '작업 관리자' 화면이 나타나는데요, 그 중에서 '성능' 탭 메뉴를 선택한 후, 상세 항목에서 'GPU'를 선택해주면 아래 화면처럼 GPU 메모리 사용량을 실시간으로 확인할 수 있습니다. 




많은 도움이 되었기를 바랍니다. 


이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요. :-)



Posted by R Friend R_Friend

댓글을 달아 주세요

Tensorflow, Keras를 사용하는 중에 'TypeError: softmax() got an unexpected keyword argument 'axis' 의 TypeError 발생 시 업그레이드를 해주면 해결할 수 있습니다. (저는 Python 2.7 버전, Tensorflow 1.4 버전 사용 중에 Keras로 softmax() 하려니 아래의 에러 발생하였습니다)





먼저, 명령 프롬프트 창에서 Tensorflow 가 설치된 conda environment 를 활성화시켜보겠습니다. 



$ conda env list

tensorflow     /Users/myid/anaconda3/envs/tensorflow


$ source activate tensorflow  # for mac OS

$ activate tensorflow # for Windows OS


(tensorflow) $ 

 




참고로 Python과 Tensorflow 버전 확인하는 방법은 아래와 같습니다. 



(tensorflow) $ python -V

Python 2.7.14 :: Anaconda custom (64-bit)


(tensorflow) $ python

Python 2.7.14 |Anaconda custom (640bit)| (default, Oct 5 2017, 02:28:52)

[GCC 4.2.1. Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin

Type "help", "copyright", "credits" ro "license" for more information.

>>> import tensorflow as tf

>>> tf.VERSION

'1.4.0'

 




  (1) TypeError: softmax() got an unexpected keyword argument 'axis' 에러 대처법


Python에서 패키지 관리할 때 사용하는 pip 를 먼저 upgrade 시켜 준 후에 Tensorflow 를 업그레이트 해줍니다. Python 3.n 버전에서는 pip3 install package_name 을 사용하구요, GPU 의 경우 tensorflow-gpu 처럼 뒤에 -gpu를 추가로 붙여줍니다. 



# --------------------
# TypeError: softmax() got an unexpected keyword argument 'axis'
# --------------------

# => upgrade tensorflow to the latest version


(tensorflow)$ pip install pip --upgrade # for Python 2.7
(tensorflow)$ pip3 install pip --upgrade # for Python 3.n

(tensorflow)$ pip install tensorflow --upgrade # for Python 2.7
(tensorflow)$ pip3 install tensorflow --upgrade # for Python 3.n
(tensorflow)$ pip install tensorflow-gpu --upgrade # for Python 2.7 and GPU

(tensorflow)$ pip3 install tensorflow-gpu --upgrade # for Python 3.n and GPU

 




Tensorflow 업그레이드 해줬더니 이번에는 numpy에서 아래의 에러가 나네요, 그래서 numpy도 업그레이드 해주었더니 문제가 해결되었습니다. 


  (2) numpy Traceback (most recent call last) RuntimeError: 

      module compiled against API version 0xc but this version of numpy is 0xb



# --------------
# Traceback (most recent call last) RuntimeError:

# module compiled against API version 0xc but this version of numpy is 0xb
# ---------------


# => upgrade numpy to the latest version


(tensorflow)$ pip install numpy --upgrade



많은 도움이 되었기를 바랍니다. 



Posted by R Friend R_Friend

댓글을 달아 주세요

집에서 GPU를 탑재한 PC로 본격적으로 딥러닝 공부하고 싶은 분들이라면 


- 어느 정도 사양으로 PC를 구성해야 하나? 


- 가격대는 어느정도 되나? 


궁금하실 것 같습니다.  


저도 궁금해서 구글링도 하고, 주변에 지인 통해서 물어도 보면서 조사를 해보았었거든요. 


이번 포스팅에서는 제가 2주일 전에 집에서 딥러닝 공부하는데 사용하려고 장만한 PC 사양과 가격을 공유하고자 합니다.  사양 조사하고 견적받아서 비교해보는데 조금이나마 도움이 될 것 같습니다. 


와이프한테 재가(?)를 받은 예산 한도가 있어서 그래픽카드는 GTX 1070 DDR5 8GB로 했구요(예산이 넉넉하시면 GTX 1080 으로...), 가성비를 감안해 조립 PC로 장만했습니다.  


그동안 매번 노트북만 사용했고 데스크탑은 처음인데요, 데스크탑이 소음이 조금 있는거 빼면 가격대비 성능이 월등해서 아주 만족하고 있습니다. 






아래에 표로 사양이랑 가격을 표로 정리해보았습니다. (2017년 09월 01일 기준) 

가격은 시간이 지날 수록 내려갈 것이니 참고만 하시구요, 저는 11번가 에서 조립PC 업체 중에 한군데서 주문했는데요, 뽁뽁이로 칭칭 감아서 안전하게 빨리 배송 받았습니다.  


구분

제품명/ 스펙 

 가격 (단위: 원)

 가격 합

  데스크탑

  본체

 CPU : 인텔 7세대 카비레이크 i7 7700

 1,300,000 

 1,761,600 

(배송비 3,000 별도) 

 쿨러 : 잘만 CNPS80F 저소음 쿨러

 메인보드 : 기가바이트 B250M DS3H M-ATX

 메모리 : DDR4 16GB PC4 17000

 SSD : 120G SATA3

 그래픽 : AXLE GTX 1070 DDR5 8GB

 파워 : STROM 600LF 정격 600W V2.3

 케이스 : MK2 MAG 3.0 USB3.0

 게이밍 장 패드 (이벤트 선물)

 추가
 구성

 HDD 1TB 추가 (1개)

  59,900 

 RAM 16GB 추가 (1개)

138,000 

 삼성850 250G 변경 (1개)

67,900 

 LG DVD-RW (1개)

23,000 

 윈도우10+설치복구 (1개)

149,900 

 브리츠 BA-R9 스피커 (1개)

22,900 


GPU로 딥러닝 하는거 말고도요, VMware 깔아서 그 위에 우분투 설치하고, Ambari 설치한 후에, Ambari로 하둡 Eco 설치하기 위해서 SSD는 250GB로 했습니다.  


메모리도 최소 8GB 이상으로 하라고 권고하는데요, 저는 넉넉하게 32GB로 했습니다. 


왠만한 것은 D 드라이브 1TB에 저장해서 쓰면 하드도 꽤 안정적으로, 넉넉하게 사용할 수 있을 것 같습니다. 


5년여 전의 회사에서 쓰던 서버급을 집에서 사용하는 호사를 누리다니, 정말 기분이 좋습니다. ^____^



Wifi 인터넷 사용하기 위해 USB무선랜카드 듀얼밴드 랜카드로 했습니다. 듀얼밴드라서 속도가 무척 빠르구요, USB 꽂기만 하면 알아서 드라이버도 설치되고, 사용하기 무척 편하네요. 


구분 

제품명/ 스펙 

가격 (단위 : 원) 

무선

랜카드

 IPTIME A2000UA-4dbi USB무선랜카드 

 듀얼밴드 랜카드 (1개)

  31,300 

(배송비 2,500 별도) 



모니터는 삼성 32인치 커브드 모니터를 메인으로 쓰고, 세로로 돌려서 쓸 수 있는 델 24인치 모니터를 보조로 사용하고 있습니다. 델 24인치 모니터가 베젤도 얇고, 세로로 길게 쓸 수 있어서 긴 코드 참고해서 보면서 쓰기에 아주 좋습니다. 삼성 모니터는 기사님께서 배송 & 설치해주셔서 편했구요, 델 모니터는 택배로 온거 제가 설치했는데요, 설명서 보고 따라하면 아주 쉬웠습니다. 


키보드는 회사에서 쓰고 있는 MS거 인체공학 키보드로 집에서 쓸거 하나 더 장만했습니다. 'ㅎ'이랑 'ㅠ'의 자판 위치가 일반 키보다랑은 사용하는 손가락이 달라서 처음에 좀 익숙해지는데 시간이 필요한데요, 확실히 인체공학적이라 이 키보드 사용하고나서 부터는 손목 시린거가 없어졌어요. 비싼게 흠이긴 해요. ^^;


구분 

제품 스펙

가격 (단위 : 원)

 모니터

 삼성 커브드 모니터[LC27F396FHKXKR] (1개)

 310,000 (배송 무료) 

 DELL U2417H 24인치 모니터 (1개)

264,000 (배송 무료) 

모니터

받침대 

 강화유리 모니터 받침대 (1개)

17,500 (배송 무료) 

 키보드

 MS스컬프트 인체공학 데스크탑 (1개)

125,800 (배송 무료) 



PC 장만하려고 준비하시는 분들에게 도움이 되었기를 바랍니다. 


이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^


ps. GPU 가격이 시간이 갈 수록 떨어지는게 아니라 더 오를줄은 미처 예상을 못했습니다. ^^;;; (2018.1월)


ps.  GTX 1070 GPU가 있는 Windows10 OS에 tensorflow-GPU 설치는 아래의 블로그 참고하세요. 

https://smprlab.tistory.com/21

https://smprlab.tistory.com/22



Posted by R Friend R_Friend

댓글을 달아 주세요

  1. 박준하 2017.10.26 09:54  댓글주소  수정/삭제  댓글쓰기

    R에대한 글을 보면서 지금까지 공부중이였습니다. 경제학과에서 R을 공부하기 위해서 항상 선생님의 글을 보았는데요. 저도 이렇게 정리하고 누군가에게 도움이 되고싶어서 경제학을 설명하는 것부터 진행해보고자 합니다. 혹시 초대장이있으시면 한장 주실수있을까요 열심히해보고싶어서요.ㅠ

  2. 감사합니다 2018.11.25 05:54  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 데이터 과학을 하고 싶어 내년 후기 대학원 진학을 목표로 하는 학생입니다. 현재 r과 파이썬을 배우고 있고, 빅데이터를 잘 분석하고 통계 내려 사람들의 삶에 꼭 필요한... 인사이트들을 뽑아낼 수 있는 데이터 과학자가 되고 싶은데, 사실 추후에 공부할 수 있다면 머신러닝, 인공지능 분야도 다루어보고 싶습니다.(이때 텐서플로를 쓰는 것으로... 알고 있습니다!)
    서론이 너무 길었는데, 이렇게 댓글을 남긴 것은 다름이 아니라 노트북을 교체해야 하는데 추후에 공부할 것들에 필요한 사양을 고려하는 것이 좋을 것 같아 여쭈어보고 싶은 게 있어 이렇게 글을 남기게 되었습니다. 공부 계획에 있는 프로그램들 중 텐서플로가 가장 무겁다고 생각하여 글을 검색하다가 필자님의 글을 보게 되었습니다. 후보군에는 맥북프로, 델 xps인데 델은 잔고장이나 뽑기운! 이 심하다 하여 맥북으로 선택하려 합니다. 구매고려 중인 노트북의 사양은 i5 8세대 2.3GHz 쿼드코어, ssd 256g, 램 8G 인데, 혹시 무리를 해서라도 램을 16기가로 늘리는 게 좋을지... 궁금합니다ㅜㅜ 갑작스러우실텐데, 굳이 이렇게 댓글을 남긴 이유는 필자분께서 포스팅하셨던 글들을 주욱 보았는데 제가 향후 공부해야 할 것들이며, 그래서 더 사양에 대해 잘 아실 것이라 판단되서인데 혹시 무례해보였다거나 부담스러우셨다면 정말 죄송합니다...ㅜㅜ 다짜고짜 댓글 남기는 게 처음이라 정말 민망하고 송구스러운데... 혹시 답변해주실 수 있다면 답변 부탁드리겠습니다. 긴 글 읽어주셔서 감사합니다!

    • R Friend R_Friend 2018.11.26 14:41 신고  댓글주소  수정/삭제

      안녕하세요. 데이터 과학을 전공하려 대학원 진학 준비 중이시라고 하니 응원을 드립니다. 저는 주변에 대학원 진학 고민하는 분 계시면 추천드리는 편입니다.

      맥북프로로 램 16기가면 정말 좋긴 할텐데요, 예산 범위가 어떻게 되는지 모르겠습니다.

      저는 회사에서 맥북프로 2.9GHz Intel Core i7, 램 16기가, 15인치로 쓰고 있고, 매우 만족하고 있기는 한데요, 개인적으로 사려면 비용 부담때문에 많이 고민스러울것 같습니다.

      노트북으로는 딥러닝을 오픈된 샘플 데이터로 학습하는 용도로는 괜찮은데요, 5~10시간 이상 씩 돌려야 하는 빅데이터로 트레이닝해야 하는 경우라면 과열로 메인보드가 타버리는 수가 있습니다. (주변에 2명 봤습니다).

      그래서 빅데이터로 딥러닝 해야 될 상황이거나 혹은 예산 한도로 고성능 노트북을 사기에 부담스러운 경우에서 아마존이나 구글, MS 클라우드에서 GPU 과금하면서 사용하는 것도 고려해볼 만 합니다. 혹은 그리 크지 않은 데이터라면 구글 Colaboratory (<- 검색해보세요) 로 무료로 GPU, TPU 활용해서 주피터노트북으로 딥러닝, 머신러닝할 수 있는 방법도 있습니다.

      대학원 진학 좋은 소식 있기를 바랍니다.

머신러닝, 딥러닝 연습할 때 책이나 블로그에서 가장 많이 사용되는 예제 데이터를 들라고 하면 아마도 손으로 쓴 숫자 '0~9' 이미지를 모아놓은 MNIST dataset 인것 같습니다.  훈련용으로 6만개, 테스트용으로 1만개 손 글씨 숫자 이미지 데이터가 들어있으니 연습하기에 제격입니다.  사이즈도 표준화 되어 있고, 가운데로 정렬도 잘 되어 있어서 훈련을 시키면 매우 높은 정확도로 훈련이 아주 잘 되지요. (실전 데이터도 과연? ㅎㅎ)


28x28 행렬에 숫자가 들어가 있구요, 이를 이미지로 그리면 손으로 쓴 숫자 글자가 됩니다.  아래 이미지는 이런 '0~9'까지의 손글씨 숫자들을 모아놓은 것입니다.  필체가 조금씩 다른데, 단번에 알아보기 쉬운 것도 있구요, 사람이 보기에도 헷갈리는 것들도 섞여 있습니다. 


[ 손으로 쓴 '0~9' 숫자들의 이미지 데이터 셋 MNIST ]




이번 포스팅에서는 tensorflow 설치 후 MNIST dataset을 사용하여 DNN 이나 CNN 연습해보려고 했더니 'SSL: CERTIFICATE_VERIFY_FAILED' 에러가 날 경우 조치 방법을 소개하겠습니다. 


제가 사용하는 환경은 아래와 같았는데요, 처음 MNIST dataset 다운로드 하려니 'SSL: CERTIFICATE_VERIFY_FAILED' 에러가 나더군요.  


 구분

버전/내용

[참고] terminal shell script 

 OS

 mac OS X 10.12.5

 

 Python

 3.6.1

# python 버전 확인

$ python3 --version

Python 3.6.1

 tensorflow

 1.2.1

# tensorflow 버전 확인

$ python3 -c 'import tensorflow as tf; print(tf.__version__)'

1.2.1

 CPU or GPU

 CPU

 

 설치/사용 환경

virtual env.

(가상환경)

# virtualenv (가상환경활성화 : activate

$ source /Users/Desktop/tensorflow/bin/activate


# 가상환경(virtual env.)에서 Jupyter Notebook 열기

$ jupyter notebook


구글링 해보니 아마도 Python 3.5 버전 이하로 설치를 했어야 했는데 3.6.1 최신 버전으로 설치하다 보니 에러가 난 것 같습니다.  Python 2.7 버전이나 Python 3.5 버전으로 재설치해보라는 답변이 있는 것으로 봐서는요. 



가상환경에서 Jupyter Notebook 띄우고, tensorflow importing 한 다음에, 아래 처럼 MNIST dataset 불러오는 script를 실행했더니 'SSL: CERTIFICATE_VERIFY_FAILED' 에러가 났습니다. 



# importing tensorflow

import tensorflow as tf

 

# mnist dataset loading

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("./mnist/data/", one_hot=True)



urllib.error.URLError: 
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)>


Python 3.6.1을 그대로 사용하는 상태에서 MNIST dataset 다운로드 시 'SSL: CERTIFICATE_VERIFY_FAILED' 에러를 해결하려면 터미널에서 아래 bash script 를 실행시켜주면 됩니다. 



# solution for 'SSL: CERTIFICATE_VERIFY_FAILED' error (=> type in below bash script at terminal)

$ /Applications/Python\ 3.6/Install\ Certificates.command 

 


-- pip install --upgrade certifi

Requirement already up-to-date: certifi in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages

 -- removing any existing file or link

 -- creating symlink to certifi certificate bundle

 -- setting permissions

 -- update complete





위 bash script로 certificate update 해주고 나니 tensorflow 에서 MNIST dataset 다운로드 제대로 되네요. 


== terminal 에서 가상환경 활성화 후 Jupyter Notebook 열고...


# virtualenv (가상환경활성화 : activate

$ source /Users/Desktop/tensorflow/bin/activate


# 가상환경(virtual env.)에서 Jupyter Notebook 열기

$ jupyter notebook 



* (주의사항) 가상환경(virtual env.) 에 python, tensorflow 설치한 분의 경우, Anaconda 에서 Jupyter notebook 을 열면 가상환경에 깔린 python 3.6.1, tensorflow를 Jupyter notebook이 인식 못해요. 가상환경에서 사용할 수 있도록 python 이랑 jupyter notebook 설치하고, 가상환경 활성화 한 후에 jupyter notebook 실행해서 tensorflow 사용하셔야 합니다. (Anaconda 사용하려면 conda 로 별도로 tensorflow setting 필요해요.)

(이걸 몰라서 왜 안되나 하고 한참을 애먹었네요. ㅜ_ㅜ)



== Jupyter Notebook 에서 tensorflow importing 하고 MNIST dataset 읽어오기


# importing tensorflow

import tensorflow as tf

 

# mnist dataset loading

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("./mnist/data/", one_hot=True) 


Extracting ./mnist/data/train-images-idx3-ubyte.gz

Extracting ./mnist/data/train-labels-idx1-ubyte.gz
Extracting ./mnist/data/t10k-images-idx3-ubyte.gz
Extracting ./mnist/data/t10k-labels-idx1-ubyte.gz



많은 도움 되었기를 바랍니다. 


이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. 



Posted by R Friend R_Friend

댓글을 달아 주세요

집에서 개인 컴퓨터, 노트북으로 텐서플로우 공부하려는 분들을 위해 CPU를 지원하는 맥 OS X 에 텐서플로우 (tensorflow) 를 설치하는 방법을 소개하겠습니다. 그리 어렵지 않으므로 아래 소개해드린 내용을 그래로 차근차근 따라서 하면 금방 설치가 될 것입니다. 


(GPU 지원 텐서플로우 설치는 좀 복잡한데요, NVIDIA 설치 가이드 사이트를 참고하시기 바랍니다)




=========  Python 3 설치하기  ==========


혹시 컴퓨터에 Python 3 설치 안하신 분은 아래 참고해서 설치하시기 바랍니다. 

(Python 설치되어 있는 분이나 혹은 Python 2.7 사용하는 분은 pass)


1. Python 공식 사이트에 접속해서 Python 3.5 설치 파일 다운로드 하기

   https://www.python.org/downloads/


2. 다운로드한 Python 3.5 클릭해서 디폴트 세팅으로 설치하기 






(1) CPU 지원 환경에서 텐서플로우 (tensorflow) 설치 


(* reference : https://www.tensorflow.org/install/install_mac )



텐서플로우를 설치해서 사용하는 방법에는 서너가지가 있는데요, 


  • virtualenv (가상환경)
  • Native pip
  • Docker (https://www.docker.com/)

등의 방법이 있습니다. 

텐서플로우 공식 사이트에 가보면 첫번째 방법인 virtualenv 를 강력히 추천(strongly recommend) 한다고 나와있습니다. virtualenv (가상환경) 은 다른 Python 개발환경으로 부터 분리된 가상환경을 제공하여 줌으로써 Python 버전이나 설정의 차이에 따른 충돌, 간섭 없이 편리하게 사용할 수 있는 장점이 있기 때문입니다. 

컴퓨터 사용에 능숙한 개발자라면 Native pip 로 직접 설치, 사용할 수 있겠구요, 애플리케이션 아키텍터에 텐서플로우를 설치해서 Docker의 컨테이너에 올려 완전히 격리된 상태에서 개발을 하고자 하는 분이라면 Docker 를 사용하면 되겠습니다. 

그래서 이 포스팅에서는 cpu 지원 컴퓨터에 virtualenv (가상환경)에서 Python 3.n 버전으로 텐서플로우를 설치하고 활성화(activate) 하는 방법만 소개하겠습니다. 


(1-1) 터미널 실행



(1-2) 터미널로 pip 설치


$ sudo easy_install pip

 




(1-3) 터미널로 virtualenv (가상환경) 설치
 


$ sudo pip install --upgrade virtualenv

 




(1-4) virtualenv (가상환경) 생성

아래에 파란색 부분의 directory 경로명에는 사용자가 원하는 경로를 써주시면 됩니다. 저는 /Users/Desktop/ 안에 tensorflow 폴더를 하나 만들고 그곳에 virtualenv 를 생성해보겠습니다. 아래의 명령어를 실행시키고 나면 아래 지정해주신 경로의 폴더 안에 'bin', 'include', 'lib' 폴더가 생기고 거기에 virtualenv 관련 파일들이 여러게 새로 추가되어 있을 겁니다. 


virtualenv --system-site-packages -p python3 /Users/Desktop/tensorflow # for python 3.n

 




혹시 Python 2.7 버전 사용자라면 아래처럼 터미널에 명령어 실행하면 됩니다. 

$ virtualenv --system-site-packages directory  # for python 2.7




(1-5) virtualenv (가상환경) 활성화 : activate

가상환경 활성화는 $ source directory/bin/activate 명령어를 사용합니다. 

아래의 파란색 부분에는 위의 (1-4)번 virtualenv 가상환경 생성 시 설정했던 directory 경로명을 표기해주면 됩니다. 

(참고로, 맥북의 Finder 에 들어가서 tensorflow 폴더에 커서를 대고 손가락 두개로 클릭한 후 -> '정보 가저오기'를 선택 -> '위치' 내용을 마우스로 블록 설정 -> 복사 -> 아래의 터미널에 '붙여넣기' 하면 경로 복사해올 수 있습니다.)


제대로 가상환경 활성화가 되었다면 아래 화면캡쳐한 것처럼 (tensorflow) ~:$  처럼 되어있을 겁니다. 



source /Users/Desktop/tensorflow/bin/activate

 





(1-6) 텐서플로우가 필요로 하는 패키지들 설치하기 (for python 3.n)


$ pip3 install --upgrade tensorflow # for Python 3.n 






혹시 python 2.7 사용자라면 아래 처럼 텐서플로우가 필요로 하는 패키지를 설치하면 됩니다. 

pip install --upgrade tensorflow # for Python 2.7



 (2) 텐서플로우 가상환경 설치 완료 후 텐서플로우 사용 하기


virtualenv (가상환경) 에서 텐서플로우를 사용하기 위해서는 virtualenv 활성화(activate) 를 먼저 꼭 해야한다는 점 유념하시기 바랍니다.    



(2-1) virtualenv (가상환경) 활성화 : activate



source /Users/Desktop/tensorflow/bin/activate

 




(2-2) Jupyter Notebook 열고 텐서플로우 불러오기 (import tensorflow)



===== 터미널에서 Jupyter Notebook 설치하기 =====  (이미 설치하신 분은 pass)

$ pip3 install jupyter



===== 터미널에서 Jupyter Notebook 실행하기 =====

$ jupyter notebook

 


* 가상환경에 Python, tensorflow를 설치했으므로 Anaconda 에서 Jupyter notebook 실행시켜서 사용하면 안됩니다. 가상환경에 jupyter notebook 설치하고 가상환경에서 jupyter notebook 실행해서 tensorflow importing 해야 제대로 인식을 합니다. 




localhost:8888 로 Jupyter Notebook 열고 나서 => import tensorflow as tf로 텐서플로우를 불어와서 사용하면 됩니다. 





(2-3) 텐서플로우 사용 끝나면 => virtualenv (가상환경) 비활성화 시키기 : deactivate



(tensorflow) ~:$ deactivate

 



virtualenv(가상환경)에 텐서플로우를 설치하였으니 이제 딥러닝의 세계로 떠나보시기 바랍니다. 


Bon Voyage ~ Tensorflow!


이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. 






Posted by R Friend R_Friend

댓글을 달아 주세요

  1. dasdf 2018.06.19 15:06  댓글주소  수정/삭제  댓글쓰기

    사랑합니다