1. 부지런하고 성실하게 살기
    • 아침운동 및 명상 - 아침운동 : 줄넘기 및 맨몸체조, 명상 : 김도인_리프레시 마인드
    • 시간약속 엄수 - 출근시간, 모임시간
    • 쉬는시간 핸드폰 2시간 미만 - 유투브 줄이고 핸드폰 요금제 줄이기
    • 헬스 PT 3개월 이상 꾸준히 - 2월 이후


  2. 독서
    • 한달에 2권 이상 필독 (우선 습관을 들이는 목적 : 얇은 소설 --> 두꺼운 서적) - 바로 시작
    • 한달에 한번 이상 책 관련 블로그 글 게시 - 바로 시작
    • 독서모임 참가 - 진행 중


  3. 취미생활 및 자기계발
    • 반년간 목표로 하는 곡 선정 -> 일렉기타 연습 -> 기숙사 되면 짐옮길때 기타가져오기
    • 하루에 20~30분 드럼 손풀기 -> 메트로놈 키고 패러디들 연습 
    • 유니티 공부, 게임개발 툴 및 개론 공부 -> 이거는 나중에 스터디 모집해보기
    • 4박 5일 배낭여행 -> 1순위 베트남(하노이, 다낭), 2순위 미국(샌프란), 3순위 영국(맨체스터)

    • 영어공부 - 오픽 IH 이상 취득, 토익 880점 이상 (주말에 독학 또는 인강)
                  - 자격증 취득 후 스피킹 학원 다니기

    • 주말 - 토 : 밴드합주 , 책읽기
               일 : 영어공부, 운동, 개인공부

  4. 신년 다짐
    • 연초 --> 전자담배 (1월 3일 ~)
    • 일요일 아침 화장실 청소 및 이불 털기
    • 일주일 최소 2번 방청소
    • 일주일 최소 3번 일기쓰기 - 블로그 (오늘부터)






<출처 및 참고> https://datascienceschool.net/view-notebook/416d733c3a734565b69fd0c8dc959edb/ 


Numpy(넘파이)란 무엇일까?


Numpy는 파이썬의 수치해석용 라이브러리입니다.


실직적으로 다차원 행렬 자료구조인 ndarray를 핵심으로 선형대수 연산이 필요한 알고리듬에 사용됩니다..




ndarray 클래스


ndarray는 Numpy의 핵심인 다차원 행렬 자료구조 클래스 입니다.

실제로 파이썬이 제공하는 List 자료형과 동일한 출력 형태를 갖습니다.


ndarray는 다음과 같이 선언해 볼 수 있습니다.


import numpy as np   #numpy는 기니까 np로 줄여서 사용
a = np.array([0,1,2,3,4,5,6,7,8,9])
b = np.array([0.12 , 0.34, 0.45, 0.66])
c = np.array(['a' , 'b' , 'c'])
print(type(a))

print(type(a))의 결과는 <class 'numpy.ndarray'> 로 나오는 것을 확인 할 수 있습니다.


print(a)의 결과는 일반 파이썬 리스트와 동일합니다.


  • Python 리스트

    • 여러가지 타입의 원소
    • linked List 구현
    • 메모리 용량이 크고 속도가 느림
    • 벡터화 연산 불가
  • NumPy ndarray

    • 동일 타입의 원소
    • contiguous memory layout
    • 메모리 최적화, 계산 속도 향상
    • 벡터화 연산 가능

 출처 : https://datascienceschool.net/view-notebook/416d733c3a734565b69fd0c8dc959edb/ 



여기서 한가지 의문이 생깁니다.


우리는 파이썬의 List로도 다차원 행렬을 구현할 수 있고, 


List의 여러 함수를 사용하여 행렬 연산을 구현할 수 있습니다.


그렇다면 왜 Numpy의 ndarray를 사용하는 것일까요?


Numpy만의 선형대수 연산이 일반 파이썬의 List 보다 선형대수에 유리한 점이 많기 때문일 것입니다.


그렇다면 ndarray의 장점에는 어떤것이 있을까요?



ndarray 구현방식


ndarray는 일반 파이썬 List의 구현방식(Linked List)와 다르게 C의 배열(array)의 특성인

연속적인 메모리에 배치된다는 점입니다.


이로 인해 C의 array가 가지는 장점은 살리면서 파이썬의 직관적인 코딩도 가능하게 됩니다.


인접한 메모리 배치는 다수의 선형대수 연산의 속도를 향상시킬 수 있습니다.


그래서 전문가들의 python 성능 향상을 위한 코딩 관례중 python에서 ndarray의 벡터화 연산으로


계산할 수 있는 경우의 파이썬 내장 반복문은 사용하지 않는다는 점이라고 합니다.


 

ndarray 활용하기


ndim , shpae


ndarray 의 기본메소드중 ndim 과 shape는 머신러닝의 텐서 구조와 차원을 알아내는 것과 동일합니다.


print(a.ndim)
print(a.shape)
 1
(10,)


다차원 행렬 인덱싱 및 슬라이싱


ndarray는 일반 파이썬 list에는 없는 콤마(,)사용 인덱싱, 슬라이싱이 가능합니다.

a = np.array([[0, 1, 2], [3, 4, 5]])
a[0,0]  # first row , first col
a[0,1]  # first row , second col
a[-1,-1] # last row , last col

위 코드처럼 인덱싱이 가능하며

a = np.array([[0, 1, 2, 3], [4, 5, 6, 7]])
a[0,:]  # first row(전체)
a[:,1]  # second col (전체)
a[1,1:] # second row의 second col 부터 끝까지
a[:,0:3] #모든 row의 0:3까지 col

위코드 처럼 슬라이싱이 가능한 것을 볼 수 있습니다..


행렬 인덱싱


ndarray의 꽃(?) 이라고도 말할 수 있는 이 강력한 기능은 Fancy Indexing이라고도 불린다고 합니다.


데이터 베이스의 Query 기능을 수행하는 기능이기도 합니다.


Boolean 방식과 정수(인덱스) 행렬 방식 두가지가 존재합니다.


  • 불리안(Boolean) 방식 행렬 인덱싱

    • True인 원소만 선택
    • 인덱스의 크기가 행렬의 크기와 같아야 한다.
  • 정수 인덱스 방식 행렬 인덱싱

    • 지정된 위치의 원소만 선택
    • 인덱스의 크기가 행렬의 크기와 달라도 된다.

 출처 : https://datascienceschool.net/view-notebook/416d733c3a734565b69fd0c8dc959edb/ 


불리안 방식 행렬 인덱싱

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
idx = np.array([True, False, True, False, True, False, True, False, True, False])
print(a[idx])
[0 2 4 6 8]

위와 같이 True인 인덱스의 값을 가지는 행렬로 출력되는 것을 볼 수 있습니다.


정수 방식 행렬 인덱싱

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) * 10
idx = np.array([0, 2, 4, 6, 8])
print(a[idx])
[0 20 40 60 80]

이번에는 idx 어레이(ndarray)의 정수값인 0, 2, 4, 6, 8 번째 인덱스의 값을 가지는 


행렬로 출력되는 것을 볼 수 있습니다.



정수 방식 행렬 인덱싱은 중복되는 인덱스를 넣어 출력하는 것도 가능합니다.

a = np.array([0, 1, 2, 3]) * 10
idx = np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2])
print(a[idx])
[0 0 0 0 0 0 10 10 10 10 10 20 20 20 20 20]

결과는 위와같이 출력됩니다. ( 총 행렬의 길이가 늘어났습니다. )



지금까지 Numpy라이브러리와 그 핵심 클래스인 ndarray에 대해 알아보았습니다. ㅎㅎ



리눅스 Ubuntu 14.04 LTS ,
로컬계정에 텐서플로우(Tensorflow) GPU(1.4) 설치하기





이번에는 리눅스 os인 우분투(Ubuntu) 14.04 LTS server에서
로컬계정에 텐서플로우(Tensorflow) GPU 1.4 버젼을 설치하고
설정하는 방법에 대해 알아보도록 하겠습니다.



1. 아나콘다를 설치합니다(python 3버전) à 홈페이지에서 linux 용으로 받으면 됩니다.

  

 << 클릭하면 다운로드페이지로 이동합니다. >>



2. conda create –n <가상환경명> python=3.5 로 가상환경을 생성합니다.

(아래는 <가상환경명> => envs_name 으로 임의 설정했을경우)

conda create -n envs_name python=3.5


3. source activate <가상환경명> 으로 가상환경에 진입합니다.  

source activate envs_name


4. pip install tensorflow-gpu==1.4 pip install numpy h5py scipy cython pandas keras matplotlib (pip 업그레이드 후)

pip install --upgrade pip
pip install tensorflow-gpu==1.4
pip install numpy scipy cython pandas keras matplotlib spyder seaborn scikit-learn h5py



5. NVidia 로그인 후 Ubuntu 14.04 LTS 버전에 맞는 cuda-8.0 cuDNN 6.0을 받아줍니다.


<CUDA-8.0> <-- Ubuntu 14.04에서는 9버전 이상 사용 불가

<위 이미지 클릭시 링크로 이동>




<cuDNN-6.0> <-- Cuda8.0에서 쓸수 있는 최신 cuDNN

<위 이미지 클릭시 링크로 이동>


cuda-8.0 : https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run

cuDNN : https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v6/prod/8.0_20170307/cudnn-8.0-linux-x64-v6.0-tgz


받은 후에 chmod로 실행권한 및 읽기권한을 부여해야 합니다.(tar –zxvf <파일명>.tgz


chmod 777 cuda_8.0.61_375.26_linux.run
chmod 777 cudnn-8.0-linux-x64-v6.0.tgz
tar -zxvf cudnn-8.0-linux-x64-v6.0.tgz


6. 일단 로컬 계정에 설치한다는 가정하에 설명하겠습니다.

  è 로컬에 설치 시 home/<user_name>/local/cuda-8.0 cuda-8.0을 설치해 줍니다.
 
è 그 다음 cuDNN tgz home/cuda에 압축을 풀면 됩니다.


7. 마지막으로 경로설정입니다. < 경로 설정 후에는 source ~/.bashrc 하는걸 잊지 마세요. >
 
è vi ~/.bashrc 에 들어가서 맨 밑에 줄에 다음 두 줄을 추가합니다.

export PATH=$PATH:/home/USER_NAME/local/cuda-8.0/bin
export LD_LIBRARY_PATH=/home/USER_NAME/cuda/lib64/:/home/USER_NAME/local/cuda-8.0/lib64:${LD_LIBRARY_PATH}


8. python 명령어를 치고 들어가서 import tensorflow as tf 를 쳐봅니다.

import tensorflow as tf
sess = tf.Session()



위와같이 /device : GPU:0 으로 등록이 되었다면 제대로 완료된 것입니다.


다음 포스트는 텐서플로우 멀티GPU 이슈에 대해 알아보도록 하겠습니다.

내용 출처 : https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html <subicura님 블로그>

http://pyrasis.com/docker.html       <thebook.io - 가장 먼저 배우는 도커>
https://tech.ssut.me/2017/08/15/what-even-is-a-container/ <Tech-ssut>


저번 포스팅에서는 도커는 무엇인지 간략하게 알아보았습니다.


이번 포스팅에서는 Docker를 설치하고 컨테이너와 이미지를 사용해보는 것 위주로 진행하겠습니다.


일단 도커의 동작원리에 대해 다시 한번 알아 보겠습니다.


1. 도커 동작원리


도커는 기본적으로 Linux 커널을 기반으로한 Docker Engine으로 작동합니다.

도커와 가상머신(hypervisor)의 차이는

가상머신(hypervisor)은 OS와 커널을 전체 가상화시켜 동작합니다.

도커는 file system 정도만 가상화 시켜 동작하되 host PC의 kernel을 공유하여 작동합니다.

도카 1.11 버전 이후 동작하는 구조는 위와같습니다.

Docker Engine과 containerd 가 분리된 덕분에 
Docker Engine을 재시작해도 container를 재시작하지 않고 바로 사용할 수 있게 되었습니다.





2. 도커 설치 및 이용


  • 리눅스에서 설치하기(우분투)

$ sudo wget -qO- https://get.docker.com/ | sh

sudo 권한을 주어 자동설치 스크립트로 받을 수 있으며


또는 apt-get install docker.io 로 설치가능합니다.

  • MAC 또는 Windows에서 docker 설치하기

    윈도우용 도커(docker for windows) : https://store.docker.com/editions/community/docker-ce-desktop-windows 

    MAC용 도커(docker for mac) : https://store.docker.com/editions/community/docker-ce-desktop-mac

    docker 공식 사이트인 docker store에서 제공하는 docker for (windows / mac)을 받아서

    자신이 원하는 간단한 설정 ( 가상 환경의 메모리, 그래픽, 네트워크 설정 등 ) 을 마친뒤 

    간단하게 설치가 가능합니다.


  • Docker for windows 사용하기
        < 현재 제가 사용하고 있는 os가 윈도우이기 때문에 윈도우로 설명하겠습니다.>

<설치가 완료된 후에 System Tray 창에 있는 도커 아이콘 우클릭 시 나오는 메뉴>



일단 저는 라이트 유저를 위해 docker에서 공식적으로 제공하는 Kitematic 이라는 docker GUI를 소개하겠습니다.

  • Kitematic 사용법

    1. docker for windows를 실행시킨 후에 로그인

    2. 위의 이미지에서 보이는 Kitematic을 누르면 Kitematic 다운로드 사이트로 이동합니다.

    3. 다운받은 Kitematic 설치파일 실행

    4. 설치가 완료된 Kitematic 을 실행



    5. 사용하기 원하는 컨테이너를 검색하거나 Recommended 목록에서 찾는다.

    6. 컨테이너 이미지의 오른쪽 하단의  ... 박스를 통해 네트워크 설정 및 버전 설정을 확인한다.

    7. CREATE 버튼을 눌러 컨테이너를 실행시킨다.


이렇게 아주 쉽게 컨테이너를 사용할 수 있습니다.




'프로그래밍 > 도커(docker)' 카테고리의 다른 글

docker 입문하기  (2) 2018.04.04



이미지 출처 : https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html <subicura님 블로그>

http://pyrasis.com/docker.html       <thebook.io - 가장 먼저 배우는 도커>




도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼 입니다.

OS를 가상화하는 VM과는 달리 KVM, Xen 등의 방식으로 성능향상이 이루어졌고 (게스트 os 설치 안함)

여러 개의 컨테이너 실행시 서로 영향을 끼치지 않고

독립적으로 실행되어 가벼운 Virtual Machine 느낌으로 사용할 수 있습니다.


실행중인 컨테이너는 보통 linux(ubuntu, centOS)기반의 이미지로 만들어지기 때문에

Bash 명령어 입력(apt-get, yum 등)이 가능합니다.

가상머신에 비해 이미지 (컨테이너) 생성 및 실행 시간이 빠른 장점이 있습니다.

도커는 컨테이너 + 이미지로 구성되어있습니다.



<AWS(Amazon Web Service)에서 소개하는 Docker의 장점>


    도커에서 가장 중요한 개념은 컨테이너와 이미지라고 생각합니다.

    이미지 = 컨테이너실행에 필요한 파일과 설정 값등을 포함하는 것 (상태값을 가지지않음, 변하지않음)

    컨테이너 = 이미지를 실행시킨 상태 , 변하거나 추가적으로 생성된 값은 컨테이너에 저장

    컨테이너의 상태를 변경하거나 삭제시 이미지에는 영향 없음(변화 x)


    한 서버에 여러 개의 컨테이너를 실행시킬 수 있으며

    새로운 서버 추가시, 필요한 이미지를 받아서 컨테이너를 돌려주면 의존성 파일 문제가 쉽게 해결됩니다.

    Ex) Ubuntu, MySQL, Gitlab(ruby,go,database,reids..)




    도커의 이미지는 레이어 저장방식을 채택했습니다.

    레이어 저장방식을 사용함으로써 버전관리가 용이해졌고 업데이트 시 새롭게 추가된 내용만 받아오기 때문에

    기존(가상머신)의 이미지를 통째로 받아와 실행하던 방식에 비해 훨씬 빠르고 관리하기가 편해졌습니다.

    도커 설치 및 이미지 관리는 다음 포스트에서 다뤄보겠습니다.



'프로그래밍 > 도커(docker)' 카테고리의 다른 글

도커(docker) 설치 및 활용하기  (1) 2018.04.04



인간의 스탠스(삶의 기준)에 대해


교수 : 인간이란 무엇일까? 어떤 것을 인간이라고 불러야 하나

동환 : 다른 대다수의 동물들이 할 수 없는 언어적 의사소통, 예술의 창작, 과학적 사고를

할 수 있는 존재라고 생각합니다.

교수 : 그렇다면 언어적 의사소통을 하기 힘들거나, 아직 문명의 발전 수준이 미약하여 위와 같은 행위를 할 수 없는 사람은 인간이 아닌것인가?

동환 : 그렇다면 이족보행을 하며, 도구를 사용할 수 있는 존재라고 생각합니다.

교수 : 그럼 마찬가지로 선천적으로 장애를 가지고 태어난 존재나 정신지체들은 인간이라고 할 수 없는것인가?

동환 : ...


위의 대화는 개인이 인간이란 존재에 대해 가지고 있는 스탠스(입장)가 얼마나 쉽게 흔들릴 수 있는지, 자신의 주장을 펴기 위한 근거가 부족하다는 것 대해 일깨워주는 수업이었다고 한다.


사고의 방향을 잡아주는 역할을 한다고 할 수 있는 스탠스는 탄탄한 지식적, 경험적 근거에 의해 올바르게 형성, 강화 될 수 있다.

스탠스라는 단어에 대해 구체적으로 정의를 내리기 힘들지만 위의 내용으로 관념적인 이해는 가능하다고 생각된다.

나는 스탠스라는 단어가 보편적 진리, 본질과 유사한 의미를 지닌다고 생각한다.

개인의 스탠스를 발전시키고 확장시켜 나간다면, 어느 누구에게도 자신의 주장이 그럴싸하고 설득력이 생기게 될 것이다. 그리고 더 나아가 기존에 없던 것들에 대해 상상하며 자신만의 세계를 구축해 나가는 것이 궁극적인 방향이라고 생각할 수 있을 것이다.



개인의 스탠스를 만들어 나가는 것이 중요한 이유는 위의 글처럼 다른 사람의 눈과 생각에 지배되는 것이 아닌 자신의 눈과 생각으로 세상을 살아가기 위해 필수적인 과정이기 때문이라고 생각한다.

이번 모임을 통해 내가 만들어 나가고 있던 스탠스는 무엇이었는지, 앞으로는 어떻게 이걸 발전시켜나가야 할지에 대해 생각해볼 수 있는 좋은 계기가 되었다.

 

+ Recent posts