# import tensorflow
import tensorflow as tf


# variables

# 1. constant
a = tf.constant(5.0)

# 2. matrix
matrix1 = tf.constant([[3., 3.]]) # Create a Constant op that produces a 1x2 matrix
matrix2 = tf.constant([[2.],[2.]]) # Create another Constant that produces a 2x1 matrix.

# 3. else
tf.zeros(shape, dtype = , name = )
tf.ones(shape, dtype = , name = )
tf.random_normal(shape, mean = , stddev = , dtype = , seed = , name = )
tf.truncated_normal(shape, mean = , stddev = , dtype = , seed = , name = )
tf.random_uniform(shape, minval = , maxval = , dtype = , seed = , name = )
tf.random_shuffle(value, seed = , name = )

tf.Variable()

# i.e.
zeros = tf.Variable( tf.zeros( ~ ) )
 

# Example
# --------------------------------------------------------------
# Build a graph.
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b

# Launch the graph in a session.
sess = tf.Session()

# Evaluate the tensor `c`.
print(sess.run(c))

# ---------------------------------------------------------------
# Create a Constant op that produces a 1x2 matrix.  The op is
# added as a node to the default graph.
#
# The value returned by the constructor represents the output
# of the Constant op.
matrix1 = tf.constant([[3., 3.]])

# Create another Constant that produces a 2x1 matrix.
matrix2 = tf.constant([[2.],[2.]])

tmp1 = tf.matmul(matrix1, matrix2)
tmp2 = tf.matmul(matrix2, matrix1)

sess = tf.Session()
print(sess.run(tmp1))
print(sess.run(tmp2))
# --------------------------------------------------------------------



# Functions

tf.add 덧셈
tf.sub 뺄셈

tf.mul 곱셈
tf.div 나눗셈의 몫
tf.mod 나눗셈의 나머지
tf.abs 절대값을 리턴합니다.
tf.neg 음수를 리턴합니다.
tf.sign 부호를 리턴합니다.(역주: 음수는 -1, 양수는 1, 0 일땐 0을 리턴합니다)
tf.inv 역수를 리턴합니다.(역주: 3의 역수는 1/3 입니다)
tf.square 제곱을 계산합니다.
tf.round 반올림 값을 리턴합니다.
tf.sqrt 제곱근을 계산합니다.
tf.pow 거듭제곱 값을 계산합니다.
tf.exp 지수 값을 계산합니다.
tf.log 로그 값을 계산합니다.
tf.maximum 최대값을 리턴합니다.
tf.minimum 최소값을 리턴합니다.
tf.cos 코사인 함수 값을 계산합니다.
tf.sin 사인 함수 값을 계산합니다.

tf.diag 대각행렬을 리턴합니다.
tf.transpose 전치행렬을 리턴합니다.
tf.matmul 두 텐서를 행렬곱셈하여 결과 텐서를 리턴합니다.\

tf.matrix_determinant 정방행렬의 행렬식 값을 리턴합니다.
tf.matrix_inverse 정방행렬의 역행렬을 리턴합니다.




tf.shape 텐서의 구조를 알아냅니다.
tf.size 텐서의 크기를 알아냅니다.
tf.rank 텐서의 랭크를 알아냅니다.
tf.reshape 텐서의 엘리먼트(element)는 그대로 유지하면서 텐서의 구조를 바꿉니다.
tf.squeeze 텐서에서 크기가 1인 차원을 삭제합니다.
tf.expand_dims 텐서에 차원을 추가합니다.
tf.slice 텐서의 일부분을 삭제합니다.
tf.split 텐서를 한 차원을 기준으로 여러개의 텐서로 나눕니다.
tf.tile 한 텐서를 여러번 중복으로 늘려 새 텐서를 만듭니다.
tf.concat 한 차원을 기준으로 텐서를 이어 붙입니다.

tf.reverse 텐서의 지정된 차원을 역전시킵니다.
tf.transpose 텐서를 전치(transpose)시킵니다.
tf.gather 주어진 인덱스에 따라 텐서의 엘리먼트를 모읍니다.





https://tensorflowkorea.wordpress.com/1-%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C%EC%9A%B0-%EA%B8%B0%EB%B3%B8%EB%8B%A4%EC%A7%80%EA%B8%B0-first-contact-with-tensorflow/

https://tensorflowkorea.wordpress.com/3-%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C%EC%9A%B0-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81-first-contact-with-tensorflow/

데이터를 분포된 특징을 시각화된 모습을 눈으로 확인 할 수 있다면 보다 창의적인 NN을 구성할 수 있다.

Tensorboard는 다음과 같은 멋진 도구를 제공한다.




사용법은 아래 링크를 참조하자.

https://www.tensorflow.org/versions/master/how_tos/embedding_viz/

Tensorflow는 Tensor Board라는 웹 기반의 분석 툴을 제공한다.

Accrucy 및 learning rate 등을 분석하여 최적화 하는데 많은 도움이 된다.


참고로 Tensor Board는 단독으로 동작하는 방식이 아니라 기 실행된 Tensorflow 코드의 로그를 분석하여 시각화 해 주는 도구 일 뿐이다.


로그를 남기기 위해선 tensorflow 코드 내 특정 함수를 호출 해야 한다.

https://www.tensorflow.org/how_tos/summaries_and_tensorboard/ 에서 관련된 문법을 찾아 볼 수 있다.


Tensorflow에 대한 로그가 준비가 되었다면 다음과 같이 Tensorboard를 실행 할 수 있다.


텐서보드 실행하기

$ tensorboard --logdir=로그디렉토리 


웹브라우저의 다음의 주소를 붙여 넣는다.

0.0.0.0:6006 또는 localhost:6006 



다음과 같은 에러를 내면서 QT가 실행되지 않을 경우가 있다.

This application failed to start because it could not find or load the Qt platform plugin "xcb".


그럴 경우는 간단하게 QT를 다시 설치하면 된다.

$ sudo ./conda remove qt
$ sudo ./conda remove pyqt
$ sudo ./conda install qt
$ sudo ./conda install pyqt 


svn 서비스를 설치합니다

$ sudo apt-get install -y subversion

 

# 디렉토리 생성
$ sudo mkdir /var/svn

저장소 디렉토리를 생성합니다. (택1)

$ sudo svnadmin create --fs-type fsfs /var/svn (파일시스템 방식 *추천)

$ sudo svnadmin create --fs-type bdb /var/svn (버클리DB 방식)

 

디렉토리 그룹 권한을 변경합니다

$ sudo chmod -R g+w /var/svn

 

SVN 설정을 변경합니다 (주석제거)

$ sudo vi /var/svn/conf/svnserve.conf

# [general]

# anon-access = read (익명사용자 읽기권한)

# auth-access = write (등록된 사용자 쓰기 권한)

password-db = passwd (인증에 사용될 패스워드 설정 파일)


사용자 ID와 PW를 추가합니다

$ sudo vi /var/svn/conf/passwd

# [user]

id = password


SVN 서버를 실행합니다

$ svnserve -d -r /var/svn


리눅스 부팅시 자동으로 실행하도록 설정합니다.

$ vi /etc/rc.local

$ svnserve -d -r /var/svn


저장소에 trunk, branches, tags 디렉토리를 생성합니다.


먼저 SVN 에디터를 설정해야 합니다.

$ vi ~/.bash_profile

export SVN_EDITOR=/usr/bin/vim

 

 

source.파일을 설정합니다?

$ source .bash_profile

 

먼저 trunk 디렉토리부터 생성합니다

$ svn mkdir svn://localhost/trunk

 

 

위와 같이 실행하면, 다음과 같이 vim 에디터가 자동으로  실행됩니다. :q를 눌러서 빠져 나옵니다.

이어서 다음과 같이 물어보면 c를 입력합니다.

Log message unchanged or not specified

(a)bort, (c)ontinue, (e)dit :

c

 

root 암호와 svn에 등록한 사용자 ID 및 PW를 입력합니다.

그 다음 yes를 입력합니다. (에러시 # vim ~/.subversion/servers 에서 #store-passwords = nu 주석제거)

Store password unencrypted (yes/no)? yes

 

 

위와 같은 방법으로 아래의 2개 폴더로 실행합니다.

# svn list svn://localhost/branches/

 

# svn list svn://localhost/tags/

 

프로젝트가 많아지고 커지게 되면 설령 혼자서 작업 할 때라도 버전 관리를 할 필요가 있다.


백업 및 복원기능 등 많은 효과를 얻을 수 있으니 버전관리는 선택이 아닌 필수라고 여기면 된다.


버전관리를 위한 툴들은 많이 존재한다.


하지만 아직까진 만족스런 멀티플랫폼 유틸리티는 발견하지 못했기 때문에 각 OS별로 편리한 툴을 골랐다.


설치는 각 사이트를 참고하도록 한다.


신기하게도 이름이 윈도우용은 거북이, 리눅스용은 토끼 클라이언트다. 토끼와 거북이...


개인적으로 유용한 멀티플렛폼을 지원 하는 편리한 클라이언트가 빠른시일 안에 나와줬으면 하는 바램이다.



윈도우 (Tortoise SVN Client)

다운로드 후 설치


리눅스 (RabbitVCS)

$ sudo add-apt-repository ppa:rabbitvcs/ppa

$ sudo apt-get update

$ sudo apt-get install rabbitvcs-core rabbitvcs-nautilus3

$ sudo killall nautilus && nautilus


* 우분투 16.x 에서 설치되지 않을 경우

$ sudo nano /etc/apt/sources.list.d/rabbitvcs-ubuntu-ppa-xenial.list

아래 문장을

deb http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu xenial main

다음과 같이 변경 한다.

deb http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu trusty main


Matlotlib를 이용하여 매우 편하게 그래프를 그려 볼 수 있다.


그래프에 관한 다양한 함수를 제공하므로 아래 사이트를 통해서 학습하도록 한다.


http://matplotlib.org/index.html


설치는 다음과 같다.


$ conda install matplotlib 


Ubuntu에서 Apple Keyboard를 사용하다보면 Function Key들이

밝기조절, 볼륨조절 등으로 되어있어 Fn+F1~F12를 눌러야 하는 불편함 있다.

기능키가 아닌 일반적인 Function Key로 변경하고 싶다면 아래 명령을 실행하자.


$ echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode

$ echo options hid_apple fnmode=2 | sudo tee -a /etc/modprobe.d/hid_apple.conf

$ sudo update-initramfs -u -k all


이제 재부팅 하면 적용 되어 있을 것이다.

$ sudo reboot 



참고: https://help.ubuntu.com/community/AppleKeyboard


Ubuntu 패키지 저장소에 MongoDB가 존재하지만 최신판이 아닐 수도 있다.

여기선 최신판 MongoDB 설치방법을 설명한다.


1. 기존에 설치된 몽고DB 제거


$ sudo apt-get remove mongodb 

$ sudo apt-get autoremove



2. GPG 공개키 얻기


우분투에서는 GPG 키를 통해 소프트웨어 패키지의 진품 여부를 담보 해 준다.

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10



3. Source list 수정


최신판을 받아 올 수 있도록 Source list를 수정한다.

$ echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/testing multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
$ sudo apt-get update



4. 몽고DB 설치


패키지 저장소로부터 몽고DB를 설치 한다.

$ sudo apt-get install -y mongodb-org



5. 시스템 설정 파일 만들기


아래는 Ubuntu 16.04 버전 이상에서만 해당되는 작업이다. (서비스 등록을 위한 파일을 만든다.)

$ sudo nano /lib/systemd/system/mongod.service


[/lib/systemd/system/mongod.service]

[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual

[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf

[Install]
WantedBy=multi-user.target



6. mongod.conf 수정


5번 과정에서 서비스를 등록하였기 때문에 실행하면 mongod.conf의 설정을 참조하여 몽고DB를 구동하게 된다.

mongod.conf는 기본설정으로 되어 있기 때문에 나의 용도에 맞게 수정이 필요하다.


특히 일반적으로 DB서버를 외부 컴퓨터에서 원격 접속 할 일이 많은데 기본 셋팅으로는 불가능하게 되어있다.

이 부분부터 수정 하도록 한다.


localhost(127.0.0.1)가 아닌 외부 IP에서 접속하려면 /etc/mongod.conf를 다음과 같이 수정한다.

$ sudo nano /etc/mongod.conf


자동으로 현재 IP를 잡기 위해 bind_ip 부분을 주석을 달자. 또는 운영할 IP 주소로 직접 입력해도 무방하다.

추가로 포트를 변경하고 싶으면 포트 부분을 함께 변경하도록 하자.

# network interfaces
net:
  port: 27017
#  bindIp: 127.0.0.1



7. 몽고DB 검증


잘 설치되었는지 확인한다.

$ service mongod status

몽고 클라이언트를 실행하여 작동 여부를 검증한다.

$ mongo

몽고 클라이언트 실행 후 명령어

test



8. 몽고DB 서비스 제어


mongodb는 기본적으로 27017포트를 사용하고, 관리용 페이지는 28017포트를 사용하고 있다.

웹브라우저에서 자신의 IP(e.g. 192.168.0.X:28017)로 접속하게 되면 관리 페이지를 볼 수 있다.

몽고DB는 다음 명령어들로 서비스를 제어 할 수 있다.

시작
$ sudo service mongod start

종료
$ sudo service mongod stop

재시작
$ sudo service mongod restart 



9. DB 관리툴 설치


웹으로 된 몽고DB 관리 페이지가 있지만 여간 불편하다. 대책을 마련하자!

Robomongo는 Windows, OSX, Linux 모두 지원하는 범용 몽고DB 관리툴 이다.

Linux 버전을 다운로드 한 뒤 다음과 같이 설치를 진행하자.

$ tar -xvf robomongo-0.9.0-linux-x86_64-0786489.tar.gz

$ sudo mv -f -r robomongo-0.9.0-linux-x86_64-0786489/ /usr/local/robomongo

$ sudo ln -s /usr/local/robomongo/bin/robomongo /usr/local/bin/robomongo


앞으로는 Terminal에서 어디서든 robomongo를 치면 실행 할 수 있다.

$ robomongo 


실행 후 Launcher의 Robomongo 아이콘에서 오른쪽 버튼을 누른 뒤 Lock to Launcher를 눌러 주게 되면

앞으로 Launchar의 마우스 버튼 클릭 만으로도 실행 가능하다.



10. DB 백업 & 복구


별다른 설정을 하지 않았다면 기본적으로 /var/lib/mongodb 에 모든 DB가 저장된다.

안전한 곳에 복사해 두도록 한다.


백업 한 데이터를 /var/lib/mongodb 에 붙여 넣으면 복구가 완벽히 된다.


몽고DB는 좀 더 많은 기능을 가진 mongodump라는 백업&복원 툴을 제공한다.

이를 이용한 방법은 다음과 같다.


백업

$ mongodump -d [db명]  -o [백업 할 디렉토리]


복구

$ mongorestore -d [db명] [dump된 디렉토리]


하지만 mongodump를 이용시 백업 아이템의 용량이 3배가량 커진다.

특정 카테코리 만을 백업할 때를 제외하곤 그냥 폴더를 몽땅 복사해서 압축 하는 편이 낫다.


'Developments > MongoDB' 카테고리의 다른 글

몽고DB 백업 및 복구하기  (0) 2018.03.16
GridFS를 이용한 대용량 도큐먼트 처리  (0) 2018.03.09
pymongo 도움말  (0) 2016.08.07
몽고DB 스키마 디자인  (0) 2016.08.05
몽고DB 관리툴  (0) 2016.07.30


/boot 커널 부팅 이미지 있는 곳

/bin 중요하고 꼭 필요한 명령어가 있는 디렉토리

/dev 시스템 디아비스 파일 저장 디렉토리 (장치에 대한 정보는 모두 이곳에 저장)

/etc 서버 환경 설정. (대부분의 설정은 etc 에 심볼릭 링크(바로가기) 처리되어 다 모여있다.)

/home 사용자 홈 디렉토리. (계정의 기본 폴더는 미설정시 여기에 만들어 진다.)

/lib c나 c++ 같은 프로그램 라이브러리

/media cd-rom 을 위한 마운트 디렉토리

/proc 실행중인 프로세스 또는 현재 시스템 정보의 파일을 저장하는 가상 디렉토리

/root 루트의 홈 디렉토리

/sbin 시스템 관리자용 명령어가 있는 디렉토리

/tmp 임시파일 일시적인 저장을 위한 디렉토리

/usr 응용프로 그램들이 설치되는 디렉토리

/var 시스템 운영중 생성되거나 삭제되는 데이터들 (메일 , 웹서버 등등..)

 


쓰임에 맞게 사용하면 복잡함을 덜어 낼 수 있다.

원래는 머신러닝 라이브러리로 윈도우 기반 Theano를 이용하여 했으나 Theano가 32bit를 지원하지 않기 때문에

굳이 Windows 빌드를 고수 할 필요가 없다고 판단 되었다.

(제작하려는 프로그램이 제약이 있어 꼭 윈도우에서 32bit로 작동 되어야 하기에... XXX)


그럼 Theano를 선택한 가장 큰 이유인 Windows 실행이 사라지게 되므로 대세인 TensorFlow를 설치하기로 한다.

* 참고로 TensorFlow는 조만간 Windows 용이 나올 예정이다.


그렇다 해도 TensorFlow for Windows 또한 32bit 빌드를 지원하지 않을 듯 하므로 출시 된다 해도 굳이 이동 할 가치를 느끼지 못할 것이다. 보유한 컴퓨터가 단 1대라면 모를까...

하지만 기계학습에는 오랜 시간이 걸리기 때문에 1대에 모두 설치 가능 하더라도 학습용 컴퓨터는 별도로 존재하는 것이 맞다 본다.


머신러닝은 학습시 매우 오랜 시간이 소요되므로 CPU 버전은 제외하고 오직 GPU를 사용하는 것을 기본으로 한다.

학습에 있어 시간적인 스트레스 받지 않으려면 적어도 NVIDIA Geforce GTX 960 이상의 그래픽 카드가 필요하다.


각설하고.


TensorFlow는 다음과 같이 설치 할 수 있다. 주의 할 것은 CUDA와 cuDNN이 설치 된 상태로 진행해야 한다.


최신 버전 pip를 통하여 간편히 설치 하도록 하자.

$ pip install -U pip

$ pip install tensorflow-gpu


잘 작동하는지 테스트

python 실행 후 아래 문장을 실행 해 본다. (gpu 가속 여부를 확인 한다.)


import tensorflow as tf

# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))



<결과>

Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0
MatMul: (MatMul): /job:localhost/replica:0/task:0/gpu:0
b: (Const): /job:localhost/replica:0/task:0/gpu:0
a: (Const): /job:localhost/replica:0/task:0/gpu:0
[[ 22.  28.]
 [ 49.  64.]] 



참고: https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html#pip-installation

머신러닝에서는 python이 numpy, scipy, pandas와 같은 강력한 라이브러리들이 존재하기 때문에 대세로 자리매김했다.


python은 현재 3.5 버전까지 출시되었으며

Anaconda라는 패키지는 python에 필요한 다양한 라이브러리를 묶어서 편리한 설치를 도와준다.


1. Anaconda 설치


Anaconda 사이트에 접속해서 Linux용 Anaconda for python 3.5를 다운로드 한다.

Terminal을 띄워 설치를 진행한다.

sudo sh ./Anaconda3-4.2.0-Linux-x86_64.sh 


권한 설정을 변경한다.

Anaconda 업데이트 및 신규 패키지 설치 시 권한이 필요하므로 미리 수정 해 놓는다.

%ubuntu_login_ID%를 본인의 경우에 맞게 수정 후 실행한다.

$ sudo chown -R %ubuntu_login_ID% /home/%ubuntu_login_ID%/anaconda3/ 


설치가 올바르게 되었는지 확인한다.

아래 명령어들이 어느 위치에 있건 실행되는지 확인한다.

$ conda

$ python 


Anaconda 업데이트

$ conda update conda 



2. pyCharm 설치


Windows에 IDE로 Visual Studio가 있다면 python의 강력한 IDE로는 pyCharm이 있다.

무료이면서 Linux, OSX, Windows 모두 사용 가능하다.

(유료버전이 있긴하나 무료만으로도 대부분의 기능을 불편함 없이 누릴 수 있다.)

설치는 별다른 과정 없이 압축을 풀고 원하는 위치로 옮기면 끝난다.


pyCharm 사이트에서 Linux용 pyCharm Community 툴을 다운로드 한다.


압축을 푼다.

$ tar -xvf pycharm-community-2016.2.3.tar.gz


프로그램 폴더로 복사한다.

$ sudo cp pycharm-community-2016.2.3 /usr/local/pycharm


pyCharm 실행하기

$ sh /usr/pycharm/bin/pyCharm.sh


실행하기가 Terminal을 통해야 한다는 것이 좀 번거로운 면이 있다.

이는 바로가기를 만들어 불편함을 해소 하도록 하자!

파이참을 실행 후

메뉴 > Tool > Create Desktop Entry...를 실행하면 Launcher에 바로가기가 생성된다.

Launcher > Application에서 밖으로 끌어다 놓으면 편하다.


CUDA는 GPU가속을 이용한 머신러닝을 도와주는 툴킷이며

cuDNN은 함께 설치 시 CUDA를 이용한 학습 속도가 더 빨라진다.


NVIDIA 홈페이지에서 cuda toolkit 8.0 (Linux > x86_64 > Ubuntu > deb (local))과

cudnn 5 (cuDNN v5 Library For Linux) 를 다운로드 한다.

cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
cudnn-8.0-linux-x64-v5.0-ga.tgz


cuda toolkit을 설치한다.

$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
$ sudo apt-get update
$ sudo apt-get install cuda


cudnn의 압축을 푼다.

$ tar -zxf cudnn-8.0-linux-x64-v5.0-ga.tgz

압축을 풀면 cuda 디렉토리가 생성된다.

cuda toolkit이 설치된 디렉토리에 cudnn 파일들을 복사한다.

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp -a cuda/lib64/* /usr/local/cuda/lib64/


라이브러리 path를 추가하기 위해 .bashrc를 수정한다.

$ sudo vi ~/.bashrc

또는

$ sudo nano ~/.bashrc


.bashrc에 아래 내용을 추가한다.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export CUDA_HOME=/usr/local/cuda


.bashrc에 추가한 내용을 적용한다.

$ source ~/.bashrc


머신러닝을 위한 대부분의 라이브러리들은 Linux를 기반으로 하고 있다.

VMWare상으로는 GPU 가속을 받을 수 없기 때문에 별도의 머신이 필요하다.


물론 Docker를 기반으로 1대의 윈도우 PC로 구동 가능하나 100% 성능을 뽑아낼 수 없다고 본 바

별도의 머신을 셋팅하는 것을 추천한다.


리눅스는 다양한 OS들이 존재하는데 보편화된 것들(CentOS, Ubuntu) 중 Ubuntu로 머신을 셋팅 하도록 결정했다.

리눅스 머신을 셋팅하는 방법은 다음과 같다.


1. Ubuntu 64bit 설치


우분투를 다운로드 하여 설치한다.

그래픽관련 프로그램들을 설치해야 하므로 Ubuntu Server가 아닌 Ubuntu Desktop으로 설치 하도록 한다.

이 글을 쓰면서 설치 한 버전은 Ubuntu 16.04.1 LTS 이다.


주의! 최신 그래픽카드를 장착한 상태에서 설치 시 모니터가 인식하지 못하는 문제가 발생 할 수 있다.

그럴 땐 일단 최신 그래픽 카드를 탈착 후 온보드 그래픽카드로 Ubuntu를 설치한다.

그리고 후에 그래픽카드를 장착 하고 부팅하면 기본 640 * 480 해상도로 정상 부팅이 가능하다.


2. NVIDIA 드라이버 설치


NVIDIA 드라이버는 직접 다운로드 하는 방법과 자동 설치 방법으로 나뉜다. 원하는 스타일 대로 실행한다.


1. 드라이버 자동 설치

아래 명령어를 통해 한번에 설치 가능하다. (2번 과정을 건너뛰어도 된다.)

$ sudo apt-get install nvidia-current nvidia-settings


2. 드라이버 다운로드 설치

NVIDIA 드라이버 다운로드 사이트에서 최신 드라이버를 다운로드 한다.

다운로드된 드라이버는 알맞은 영문명 폴더(/tmp 등)에 이동 해 놓는다.


2-1. tty1 접속

Ubuntu Desktop에서 Ctrl + Alt + F1키를 눌러 tty1 콘솔로 접속한다.

콘솔화면이 뜨게 되는데 로그인 후 드라이버가 있는 위치로 이동한다.

$ cd /tmp


2-2. 드라이버 설치

$ sudo service lightdm stop

$ sudo sh NVIDIA_드라이버_파일이름.run

$ sudo service lightdm start


3. 드라이버 설치 확인

콘솔창을 띄워 다음과 같이 명령어를 실행한다.

NVIDIA 드라이버 이름이 뜬다면 성공적으로 설치가 된 것이다.

$ cat /proc/driver/nvidia/version


Keras는 Theano와 TensorFlow를 모두 지원하는 상위 레벨의 wrapper이다.

Keras는 Torch 처럼 프로그래밍 하듯 딥러닝 구성 할 수 있는 장점이 있다.


파이썬으로 코딩하며 실행시 Theano 코드로 변환되며 Theano는 cuDNN 기반으로 동작한다.


Keras를 윈도우 10에 설치하기는 Linux, OSX에 비하여 조금 번거롭고 복잡한 면이 있다.

차근차근 진행 해 보자.

설치 순서가 매우 중요하므로 건너뛰지 말도록 한다.


준비물:

- Windows 10

- Anaconda for python 3.5

- Visual Studio Community 2015

- Nvidia CUDA 8

- GeForce GTX 960 이상의 그래픽카드


1. CUDA 설치


1. Visual Studio Community 2015 설치


Visual Studio Community 2015를 다운로드 하여 다음과 같이 C++ 모듈을 포함하여 설치한다.

* 글 쓴 시각 기준으로 VS는 2015 버젼까지 존재하며 그 이상의 버젼에 대해서는 호환 테스트 되지 않았다.

만약 마이크로소프트 사이트에서 VS가 2015보다 높게 버젼업 되었을 경우는 아래 링크를 통해 다운로드 한다.

vs_community 2015.exe


2. 윈도우 환경변수에 Visual Studio 경로를 추가한다.


C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin를 윈도우 환경변수 PATH에 추가 해 준다.


3. NVIDIA CUDA 8 설치 및 빌드


NVIDIA CUDA 8를 다운로드 하여 설치한다. 무료로 Nvidia 회원가입 후 다운로드 할 수 있다.

정상적으로 설치가 되었다면 다음과 같은 화면을 확인 할 수 있다.


C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\Samples_vs2015.sln를 실행한다.

(여기서! Program Data 폴더는 숨김 속성이니 폴더가 보이지 않는다고 긴장하지 말자.)


아무 CUDA 샘플 프로젝트에서 마우스 오른쪽 버튼 클릭 > Debug > Start new instance를 한다.

그럼 빌드 확인창이 보이게 된다. Accept 후 예제가 빌드 되어 실행 되는 것을 확인 한다.



CUDA가 설치되면 Display Driver가 옛날 버젼으로 되어 있을 가능성이 높으므로 최신 Nvidia Driver로 업그레이드 한다.


2. Keras 설치


1. Anaconda 설치


Anaconda for Python 3.5를 다운로드하여 설치한다. (64bit로 다운로드 해야한다.)


2. Git 설치


윈도우용 Git을 설치한다.

3. Python 3.4 설치


다운로드 한 Anaconda는 기본적으로 Python 3.5를 포함하고 있다.

Theano는 Python 2.7 또는 Python 3.4 하위 버젼을 지원한다.

Python 3.5 -> 3.4로 다운그레이드 하여 호환을 맞춘다.

$ conda install python=3.4


2. Keras 설치


Keras는 pip를 통해 설치가 가능하다.

Keras는 Backend를 TensorFlow 또는 Theano로 지정해야 때문에 윈도우에서 사용 가능한 Theano를 함께 설치 해 준다.

$ conda install mingw libpython
$ python -m pip install --upgrade theano
$ python -m pip install --upgrade keras

윈도우즈에 인스톨 할 때에는 cmd.exe (명령프롬프트)를 관리자권한으로 실행해야 한다.


3. 설정파일 만들기


기본적으로 Keras는 TensorFlow를 Backend로 설정되어 있다.

Theano를 기본 Backend로 바꾸려면 다음과 같이 설정을 변경 해야 한다.

다음과 같이 Keras를 한번 실행한다. (기본 Backend가 TensorFlow라서 실행 할 수 없다고 할 것이다.)


from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential()

model.add(Dense(output_dim=64, input_dim=100))
model.add(Activation("relu"))
model.add(Dense(output_dim=10))
model.add(Activation("softmax"))


그럼 다음과 같이 윈도우 유저 폴더에 keras.json 파일이 존재하게 된다. (만약 없으면 파일을 직접 만들면 된다.)

C:\Users\UserName_BlahBlah\.keras\keras.json



4. backend를 Theano로 설정

Keras.json의 내용을 다음과 같이 수정한다.
{ "image_dim_ordering": "tf", "epsilon": 1e-07, "floatx": "float32", "backend": "theano" }


3. cuDNN 설치


cuDNN을 같이 설치하면 학습 속도가 더욱 빨라진다. 
nvidia에서 cuDNN 4.0을 다운 받아 압축을 풀면 bin, include, lib의 3개의 폴더가 있다. 
내부의 파일들을 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0에 해당되는 폴더로 옮겨주면 된다.




참고:

http://ankivil.com/installing-keras-theano-and-dependencies-on-windows-10/


"import 패키지명"으로 기술할 수 있고 "from  패키지 import 모듈명"으로 특정 모듈만을 import할수도 있다. 패키지 내부 코드에서 패키지내 다른 모듈을 참조할 경우에도 반드시 패키지.모듈명 형식으로 전체 경로를 모두 기술해 주어야 한다. 또한 패키지를 로딩할 때 하위의 모듈을 자동으로 로딩하지 않음으로 __init__를 적절하게 활용하거나 필요한 모듈을 직접 import 해야 한다. "from 패키지 import *" 형식으로 모듈을 로깅할 경우에는 모듈내 로딩 대상 속성들을 __all__ 변수에 리스트로 설정한 것처럼 __init__파일에 로딩 대상 모듈을 리스트 형태로 기술해 놓아야 한다.
 
 

*  유용한 파이썬 라이브러리 모듈


파이썬의 내장 라이브러리 모듈은 다양한 분야에 걸쳐서 충분한 테스트를 거친 좋은 코드임에도 불구하고 많은 프로그래머가 이를 모르거나 무시하면서 똑같은 또는 유사한 기능을 다시 코딩하는 우를 범하는 경우가 많다. 본격적인 프로그래밍에 앞서 구현하려는 기능이 파이썬 라이브러리 모듈에 있는지 꼭 확인해 볼 필요가 있다. 이미 안정적으로 만들어 놓은 기능을 또다시 개발하지 말고 라이브러리를 최대한 활용해 보자.
모듈 단위의 문서화 자료를 참조해도 되고 import 모듈명 이후에 help(모듈명)하면 자세한 설명을 확인할 수 있다. 

 
 
- 스트링 관련 모듈 

  • re : 스트링을 효과적으로 분석 및 처리할 수 있는 정규식 관련 모듈
  • struct : C언어 API를 사용할 수 있도록 돕는 모듈로 C언어 struct 오브젝트를 다룬고 이를 통해 바이너리 형태의 파일을 처리할 수 있도록 한다.
  • difflib : 파일비교 관련 모듈로 유닉스의 diff, 윈도우의 COMP와 유사한 알고리즘을 갖는다.
  • StringIO, cStringIO : 파일 처럼 읽고 쓸수 있는 오브젝트를 제공한다. cStringIO는 속도를 위해 C언어로 구현된 것이다.
  • textwrap : word-wrapping등 텍스트 처리를 수행한다.
  • codecs : 텍스트 인코딩 관련 모듈


 
 
- 데이터 타입 관련 모듈 

  • datetime :  달력 및 시간, 일자 관련 작업을 다룸
  • calendar : 달력 출력과 윤달 검사, 주단위 시작/종료일 추출등 작업
  • collections : 스택과 큐로 모두 활용할 수 있는 deque와 defaultdict 이라는 키가 없으면 기본값을 돌려주는 또다른 사전 타입을 제공
  • bisect : 정렬된 리스트를 관리위한 함수로 항목 추가를 위한 insort와 검색을 위한 bisect 함수를 제공하여 별도의 정렬이 필요없도록 한다.
  • array : 이미지나 음성 파일을 처리할때 유용하도록 리스트나 튜플보다 융통성을 떨어지지만 고속, 저용량의 특성으로 배열을 제공한다
  • sched : 단순한 작업 스케쥴러 관련 모듈
  • copy : 복잡한 오브젝트의 복사본을 생성한다. 파이썬의 대입문은 단순 참조로 참조가 아닌 새로운 오브젝트 생성을 목표할 때 사용
  • pprint : 내포한 리스트나 사전 오브젝트를 보기 쉽도록 출력한다.
  • sets : 임의의 집합을 다룰때 사용


 
- 수학 함수 및 기타 숫자 모듈 

  • decimal : 통화 금액 계산과 관련한 연산, 함수 지원
  • math : 다양한 수학 함수 지원
  • random : 난수 발생기 관련


 
 
- 인터넷 데이터 처리 모듈 

  • mimify : 메일 메시지의 QP(quoted-printable) 인코딩 및 디코딩 처리. mime_decode_header, mime_encode_header, mimify, unmimify
  • base64 : RFC 3548 Base16, Base32, Base64를 처리
  • binascii : 바이너리 데이터와 ASCII간의 변환
  • binhex : 맥용 binhex의 압축 및 해제
  • quopri : 스트링의 QP(quoted-printable) 인코딩 및 디코딩 처리
  • uu : UUencode, UUdecode 지원


 
 
- 마크업 처리 모듈 

  • htmllib : HTML을 분석하기 위한 모듈
  • sgmllib : SGML을 분석하기 위한 모듈로 HTML에서 텍스트, 링크, 제목등의 원소를 추출하는데 사용할 수 있다.
  • xml.sax, xml.dom, xml.dom.minidom : XML을 분석하기 위한 모듈로 SAX파서 또는 DOM파서를 선택하여 사용할 수 있다.
  • formatter : HTML, XML 및 기타 형식으로 출력할 때 사용한다.


 
 
- 파일 형식 관련 모듈 

  • csv : CSV(Comma Separated Value) 파일을 읽거나 내보낼때 사용
  • ConfigParser : 윈도우의 *.ini같은  환경 파일을 다룰수 있도록 한다


 
- 암호 처리 모듈 

  • hashlib : 다양한 해시 함수 제공
  • hmac : RFC 2104의 HMAC 알고리즘 지원
  • md5 : MD5  해시 제공
  • sha : SHA1 해시 제공


 
 
- 파일 및 디렉토리 처리 모듈 

  • os, os.path : 운영체제에 관계없이 운영체제의 기본적인 기능들을 다룰 수 있도록 한다.
  • fileinput : 대량의 파일을 쉽고 단순하게 사용할 수 있도록 해준다.
  • glob, fnmatch : 윈도우의 와리카드 경로 지정을 운영체제에 관계없이 사용할 수 있도록 한다.
  • shutil : 쉘환경에서 파일 복사, 이름변경등의 작업 하는 것처럼 기능을 제공한다


 
 
- 압축 및 보관 처리 모듈 

  • tarfile, zipfile : 여러 파일을 묶을 수 있도록 기능 제공
  • zlib, gzip, bz2 : 압축 및 해제 처리


 
 
- 자료 보존 처리 모듈 

  • pickle, shelve : 파이썬 오브젝트를 일회용이 아니라 지속적으로 사용할 수 있게 해주는 것으로 pickle은 serialize기법을 사용하고 shelve는 dbm 데이터베이스를 활용한다.
  • sqlite3 : SQLite DB에 접근할 수 있도록 기능 제공


 
 
- 운영체제 및 런타임 관련 모듈 

  • os, os.path : 파일, 프로세스, 디렉토리등 다양한 운영체제 기능을 접근할 수 있도록 한다.
  • time : 시간과 일자 처리를 위한 함수 제공
  • getopt, optparse : 명령행의 옵션을 분석할 수 있는 기능 제공
  • logging : 디버깅 및 오류로그를 남길 수 있도록 기능 제공
  • cmd : 프롬프트를 출력하고, 명령을 받고, 도움말이나 이전 명령을 보여주는 등의 기능을 제공
  • shlex : 쉘 프로그램처럼 입력을 받아 내용을 분석할 때 사용
  • sys : 프로그램 실행 환경과 관련한 정보등을 제공한다.
  • profile : 파이썬 코드의 성능 검사(Profile)를 위한 기능을 제공한다.
  • pydoc : 파이썬 문서화 자료를 HTML이나 텍스트로 생성한다.
  • unittest : Unit test를 지원한다.


 
 
- 인터넷 프로토콜 처리 모듈 

  • cgi : 웹서 cgi-bin에서 파이썬으로 웹 응용을 작성할 수 있도록 돕는다.
  • urllib, urllib2, urlparse : httplib등과 연동하여 URL을 열고 HTML, XML결과를 파싱한다.
  • httplib, ftplib, gopherlib : HTTP, FTP 프로토콜 클라이언트를 사용할 수 있도록한다.
  • poplib, imaplib : 메일을 읽기 위한 POP3 및 IMAP 프로토콜을 사용할 수 있게 한다.
  • nntplib : 뉴스 그룹, NNTP서버를 읽을 수 있게 한다.
  • SocketServer : 독립형 TCP 또는 UDP 서버를 손쉽게 제작할 수 있도록 한다.
  • SimpleHTTPServer, CGIHTPPServer, BaseHTTPServer : 간단한 웹서버를 구축할 수 있도록 해준다.
  • asyncore, asynchat : 시분할 응용을 만들수 있도록 해준다.
  • smtplib : 메일 전송을 위한 SMTP/ESMTP 클라이언트를 구현할 수 있게 한다.



출처: http://www.dongwun.com/tc/140

최신버젼을 적용하려면 윈도우 Commend에서 다음과 같이 입력한다.


conda update conda conda update anaconda conda update pandas


'Deprecated > Python' 카테고리의 다른 글

Python에서 차트 그리기  (0) 2016.11.02
파이썬 유용한 모듈  (0) 2016.10.14
파이썬 클래스에서 private 변수 및 함수 사용하기  (0) 2016.08.12
Protocol Buffer를 Json으로 변환  (0) 2016.08.11
pymongo 설치  (0) 2016.07.29

파이썬에서 private 변수 및 함수는 다음과 같이 변수 및 함수 앞에 "__"(두개)를 붙여 선언 할 수가 있다.


1
2
3
4
5
6
7
8
9
class TestClass:
    __privateVariable = 0
    def __privateMethod(self):
        __privateVariable = 100
    
    # 클래스 내부에서 사용하는 예
    def RunPrivateMethod(self):
        self.__privateVariable
        self.__privateMethod()
cs


private 변수를 클래스 외부에서 사용하도록 설계하면 안되겠지만 불가피한 상황에선

다음과 같이 "_클래스명 + 변수 이름"로써 접근 할 수 있다.


1
2
3
= TestClass()
c._TestClass__privateVariable = 50
c._TestClass__privateMethod()
cs


또 한가지 알아 둘 점은 protected 변수 및 함수는 다음과 같이 변수 및 함수 앞에 "_"(한개)를 붙여 선언 할 수가 있다.

'Deprecated > Python' 카테고리의 다른 글

파이썬 유용한 모듈  (0) 2016.10.14
아나콘다 업데이트 방법  (0) 2016.10.06
Protocol Buffer를 Json으로 변환  (0) 2016.08.11
pymongo 설치  (0) 2016.07.29
30분 만에 파이썬 문법 익히기  (0) 2016.07.28
스크랩 출처: http://yongho1037.tistory.com/552

  • python 내장 json라이브러리를 import해서 사용
  • python에서 dic을 이용하여 간단하게 json 타입으로 변형

    Colored By Color Scripter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
__author__ = 'yongho'
 
import json
 
data = {}
event = {}
 
event['type'] = 1
event['value'] = 3
 
for i in range(1,10):
    data[i] = event
 
print json.dumps(data, sort_keys=True, indent=4)


  • dumps 함수에 sort_keys와 indent 값은 출력시 들여쓰기를 위해 넣어준 값
  • 참고 : https://docs.python.org/2/library/json.html
  • 결과


'Deprecated > Python' 카테고리의 다른 글

아나콘다 업데이트 방법  (0) 2016.10.06
파이썬 클래스에서 private 변수 및 함수 사용하기  (0) 2016.08.12
pymongo 설치  (0) 2016.07.29
30분 만에 파이썬 문법 익히기  (0) 2016.07.28
파이썬 설치  (0) 2016.07.28

한국증권거래소 KRX 법규서비스에서 확인하도록 한다. [바로가기]


법률이 변경 될 수 있으므로 수시로 확인 해 줘야 한다.

'Finance' 카테고리의 다른 글

중요 이평선별 시간 계산표  (0) 2021.02.08
코스피 상장폐지 요건 요약  (0) 2020.05.29
대차/공매도 거래내역 조회  (0) 2016.07.28
공시 정보 얻기  (0) 2016.07.28

+ Recent posts