달력

22025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

Python을 설치하고 딥러닝을 공부하기 전에 이런 의문이 들었다.

왜 딥러닝에 Python을 많이 쓸까?

 

딥러닝/머신러닝 개발에 가장 많이 사용하는 언어는 Python, 1위다.

Python의 라이브러리는 다른 언어에서는 따로 올 수 없는 부분이라고 한다. NumPy는 텐서 연산에서 사실상 표준 API 역할을 한다. Python은 데이터 과학 분야를 위한 표준 프로그래밍 언어가 되어 가고 있다. 판다스(Pandas)는 R의 강력하고 유연한 데이터프레임을 파이썬으로 가져온다. 자연어 처리(NLP)에서는 이름도 유명한 NLTK와 빠른 속도가 장점인 스페이시(SpaCy)가 있다. 머신러닝 쪽에는 역전의 사이킷-런(Scikit-learn)이 있다. 딥 러닝이라면 현재의 모든 라이브러리(텐서플로우(TensorFlow), 파이토치(PyTorch), 체이너(Chainer), 아파치 MXNet(Apache MXNet), 테아노(Theano) 등)가 사실상 파이썬을 가장 우선시하는 프로젝트다.

파이선은 AI 연구의 최전방에 선 언어다. 대부분의 머신러닝과 딥 러닝 프레임워크는 파이썬용으로 만들어지며, AI 분야에서 일하는 거의 모든 사람들이 파이썬을 이야기한다. 하루에 적어도 한 번은 공백 문제 때문에 욕이 나오게 하는 언어임에도 바로 이러한 이유로 AI 프로그래밍 언어 중 1위로 꼽힌다.

 

 

JavaJVM 언어군(자바, 스칼라, 코틀린, 클로저 등) 역시 AI 애플리케이션 개발을 위한 좋은 선택이다. 자연어 처리(CoreNLP), 텐서 연산(ND4J) 또는 GPU 가속 딥 러닝 스택(DL4J) 등, 파이프라인의 모든 부분에서 풍부한 라이브러리를 사용할 수 있다. 또한 아파치 스파크, 아파치 하둡과 같은 빅 데이터 플랫폼에 대한 접근성도 우수하다.

 

C/C++, AI 애플리케이션을 개발할 때 가장 먼저 떠오르는 언어는 아니란다. 사실 실망이다. 하지만 임베디드 환경을 다루고 자바 가상 머신이나 파이썬 인터프리터의 오버헤드를 감당할 수 없다면 C/C++가 해답이 된다. 시스템에서 마지막 한 방울까지 성능을 짜내야 하는 상황에서는 내키지 않더라도 포인터의 세계로 다시 돌아갈 수밖에 없다. 

C/C++ 코딩은 여러 가지 접근 방법 중에서 선택이 가능하다. 바닥까지 뛰어들어 CUDA와 같은 라이브러리를 사용해서 GPU에서 바로 실행되는 자체 코드를 작성할 수 있고, 텐서플로우 또는 카페(Caffe)를 사용해서 유연한 고수준 API에 접근하는 방법을 사용할 수도 있다. 후자의 경우 데이터 과학자가 파이썬으로 만든 모델을 가져온 다음 C/C++의 장점인 속도를 십분 발휘해 프로덕션에서 실행하는 것도 가능하다. 임베디드에서는 OpenCV의 YOLO가 있다.


자바스크립트, 구글은 최근 웹 브라우저에서 머신러닝 모델의 학습 및 실행이 가능한 WebGL 가속 라이브러리인 TensorFlow.js를 출시했다. 여기에는 케라스(Keras) API, 그리고 정규 텐서플로우에서 학습된 모델을 로드하고 사용할 수 있는 기능도 포함된다. 이는 AI 영역으로 개발자들을 대대적으로 끌어들일 가능성이 높다. 현재 자바스크립트에서 이용할 수 있는 머신러닝 라이브러리는 다른 언어만큼 풍족하지는 않지만, 개발자들이 리액트(React) 구성 요소 또는 CSS 속성을 추가하는 것만큼 아무렇지도 않게 웹 페이지에 신경망을 추가하게 되는 날이 곧 온다. 생각만 해도 기대와 두려움이 동시에 느껴진다.

TensorFlow.js는 초기 단계다. 현재 브라우저에서 작동하지만 Node.js에서는 안 된다. 전체 텐서플로우 API 구현도 아직 되지 않는다. 그러나 필자는 2018년 말까지 이 두 가지 문제가 모두 해결되고, 그 직후 자바스크립트의 AI 침공이 뒤따를 것으로 예상한다.

 


R, ? R은 잘 모르겠다. 사실 관심밖이다. ㅎㅎㅎ

 

이렇게 까지가 상위 5개의 언어이고 Python을 가장 많이 쓰는 이유는 풍부한 lib와 배우기 쉽기 때문이란다. 

Posted by 생짜
|

'karma( 업 )' 카테고리의 다른 글

GIT 특정 Branch Clone  (0) 2019.11.13
VS Code에 FTP simple 설치 후 AWS에 접속하기  (0) 2019.10.28
Bash scripting cheatsheet  (0) 2018.11.29
과학기술인 등록번호  (0) 2018.11.16
호기심을 잃는 순간  (0) 2017.06.22
Posted by 생짜
|
Posted by 생짜
|

Virtualenv는 일종의 가상환경이라고 생각하자. 실제적으로는 하나의 폴더로 Python 컴파일 환경을 만들 수 있는 도구이다. 즉 하나의 컴퓨터 하드에 여러개의 파이썬 개발환경을 셋팅할 수 있도록 도와주는 환경으로 하나의 Python 컴파일 환경은 하나의 폴더로 이루어져 있다.

 

그렇다면 Virtualenv를 사용하여 가상의 컴파일 환경을 왜 만드는 걸까?

 

Python은 여러가지 외부 lib를 사용하고 각각의 lib는 pip를 통해 설치 삭제가 가능하다. Python의 각 외부 lib는 서로 조합하여 사용할 때 버전별로 충돌되는 현상이 발생할 수도 있다.  그렇기 때문에 pip와 virtualenv를 통해 각 프로젝트마다 각각의 lib를 따로 설치하고 각 프로젝트에서 사용하는 Python 컴파일 환경을 따로 만드는 것이다.  

 

다시 말해 virtualenv는 Python, pip, PypI로 부터 설치된 라이브러리들의 복사본을 만듦으로서 독립적인 파이썬 개발환경을 만들어 주는 도구이다

 

Python에는 이와 같이 가상환경을 도와주는 여러도구들이 있다. 인터넷에서 Python 설치를 치면 가장 많이 나오는 것이 conda이고 이 conda에 UI를 입힌게 anaconda이다. anaconda는 쥬피터 노트북과 궁합이 잘 맞고 virtualenv는 파이참고 궁합이 맞다고 한다. anaconda보다 virtualenv를 사용하는 이유는 좀더 작고 효율적이기 때문이다.

특히 anaconda는 리눅스 또는 맥에서 설치가 비교적 쉽지만 windows에서는 설치가 어려운 단점이 있다.

'karma( 업 ) > Python' 카테고리의 다른 글

Python, Virtualenv, OpenCV, PyCharm 설치( 1 )  (0) 2019.05.01
초보자를 위한 파이썬 300제  (0) 2019.04.15
pip(package installer for Python)?  (0) 2019.04.15
웹크롤링 좀 더 잘하기 From SlideShare  (0) 2018.11.16
None  (0) 2018.11.16
Posted by 생짜
|

아주 예전에는 vc++6.0 하나만 설치하면 끝이었던 시절도 있었다. 물론 Setting... 등에서 따로 환경을 설정해 주기는 했다. 그 외 Embedded를 한다면 따로 설치해야할 개발환경이 존재하긴했다. 그러나 지금처럼 플랫폼마나 랭귀지마다 설치했던게 많지는 않았던것 같다.

 

Python 문법이야..어럽다거나 하지는 않았다. 아니 사실 Python을 비롯해서 새로운 플랫폼이나 랭귀지 등등이 어렵다고 느껴본 적은 이제 없다. ㅋㅋㅋ

 

오히려 어려운 것은 설치, install 이었다.

 

위키백과에 따르면 pip는 파이썬으로 작성된 패키지 소프트웨어를 설치, 관리하는 관리 시스템이며 Python Package Index(PyPI)에서 패키지들을 찾을 수 있다고 한다. PyPI는 third-party 파이썬 오픈소스 패키지들을 위한 저장소이다. Python 2.7.9와 Python 3.4 버전 이후는 pip가 자동으로 설치된다고 한다. 나는 window에 Python3.7을 설치했고 window에서 cmd로 'pip' 명령어가 동작하는 것을 확인했다. pip가 자동으로 설치되어 있다.

 

Python 2.7 이하로는 pip를 사용하기 위해 따로 설치를 해줘야 한다.

sudo easy_install pip

 

기본적으로 Python은 easy_install 패키지 매니저가 자동으로 설치된다. 

 

아래는 간단하게 PIP 사용법을 정리한 사이트이다.

https://www.codingfactory.net/11346

 

'karma( 업 ) > Python' 카테고리의 다른 글

초보자를 위한 파이썬 300제  (0) 2019.04.15
Virtualenv?(Python 가상환경)  (0) 2019.04.15
웹크롤링 좀 더 잘하기 From SlideShare  (0) 2018.11.16
None  (0) 2018.11.16
for~else  (0) 2018.11.16
Posted by 생짜
|

'too many file open'으로 파일을 열다가 죽는 경우가 생겼다.

각종 파일들을 엄청많이 open하니 어느 파일이 열려 있고 어느 파일을 닫았는지 체크하면서 디버깅을 하는데 아래 명령어들을 유용하게 사용했다.

 

특정 Application에서 사용중인 파일을 체크하는 명령어. Application의 PID를 사용한다.

 

  • 열린 파일의 개수를 확인하는 명령어
    • ls -l /proc/'Application PID'/fd | wc -l
  • 어떤 파일을 열었는지 학인하는 명령어
    • ls -l /proc/'Application PID'/fd
    • lsof(list open file) 명령어 사용. lsoft 사용법 링크
      • lsof -p 'Application PID'
      • fd 정보를 파일로 저장하기
        • lsof -p 'Application PID' | tee 'File Name'

'karma( 업 ) > linux' 카테고리의 다른 글

리눅스 디렉토리 목록  (0) 2022.02.17
고급 Bash 스크립트 가이드( Link 글 )  (0) 2019.05.12
valgrind 사용 및 Error Message 읽기  (0) 2019.04.01
strace의 마술  (0) 2017.06.22
한영 변환 단축키 설정  (0) 2017.05.29
Posted by 생짜
|

https://www.youtube.com/watch?v=s1jIPo1bWCo

Screencast-O-Matic이라는 Recording Tool이다.

간편하게 동영상 강좌를 만들기 위해 공부해 봤다. 쓰기 편하고 쉬운것 같다.

'karma( 업 ) > Maker' 카테고리의 다른 글

Fusion 360 youtube 강좌 및 입문서  (0) 2019.04.10
3D 프린터를 배우다.  (0) 2018.07.02
Posted by 생짜
|

youtube에서 찾은 Fusion 360강좌다.

메이커다은쌤으로 활동하시는 분이다. 16개 정도의 강좌가 있는 것 같고 강좌 하나당 3~4분짜리로 짧기에 듣기도 편한 것 같다.

https://www.youtube.com/watch?v=CJvqI5RVVyA&list=PL3tES2o5VicInxpk6rruwwbA9yMoOwQ_X

 

현재 강좌 리스트는 

 

0. 다은쌤의 Fusion360-설치,가입하기

1. 다음쌤의 Fusion360 - 소개, 마우스 뷰 조정

2. 다음쌤의 Fusion360 - 기본 스케치1

3. 다음쌤의 Fusion360 - 기본 스케치2, 트림, 치수, 구속

4. 다음쌤의 Fusion360 - 기본 스케치3, 도형 평면, 보조선 만들기

5. 다음쌤의 Fusion360 - 기본 스케치4, 라인, 자유곡선, 오프셋

6. 다음쌤의 Fusion360 - Extrude 활용, 방향, 각도(구배), 빼기, 뉴바디

7. 다음쌤의 Fusion360 - 챔퍼, 필렛

8. 다음쌤의 Fusion360 -  쉘 + 필렛 형상 팁

9. 다음쌤의 Fusion360 - 리볼브

10. 다음쌤의 Fusion360 - 스윕

11. 다음쌤의 Fusion360 - 로프트 기본

12. 다음쌤의 Fusion360 - 로프트 응용

13. 다음쌤의 Fusion360 - 패턴

14. 다음쌤의 Fusion360 - 저장

15. 다음쌤의 Fusion360 - 3D 프린팅

예제) 이게뭐지 만들기

 

지금 보고 있는 Fusion 360 입문서는 메카피아의 'AUTODESK Fusion 360 3D 모델링 & 3D 프린팅 입문편' 을 일고 있다. 딱히 이 책이 훌륭해서 구입한 것은 아니고 내가 사랑하는 고척도서관에서 대출했다.( 여러분 도서관은 사랑입니다.)

막상 펼쳐보니 초보자가 보기에는 편하고 좋다. QR 코드가 있어 스캔하면 해당 부분을 동영상으로 배울 수도 있다.

 

 

 

Posted by 생짜
|

valgrind( '밸그린드' 라고 읽는다. )는 linux에서 memory leack을 비롯해서 각종 memory 관련 Error를 check해주는 Open Source Tool로 무료이다.

 

valgrind는 run-time상에 발생하는 memory관련 버그를 잡아주는 dynamic tool이다. 

static tool로는 Clang이 있다. static tool은 코드를 실행하지 않고 코드를 검사하여 버그를 잡아준다.

나 같은 경우 Clang으로 먼저 분석하여 코드상 품질을 확보 후 valgind를 run-time으로 실행하여 static tool인 Clang으로 검출되지 않는 memory관련 버그를 검출한다.

 

  • valgrind로 에러를 검출할 수 없는 경우는 다음 몇가지가 있다.

1. if~else, return 등 코드가 동작하지 않아 검사할 수 없는 부분, valgrind는 run-time시 동작하는 코드만 검사해준다. if~else문 등의 조건에 걸려 동작하지 않은 코드상에 있는 memory 버그는 검사하지 못한다.

2. valgrind는 부모 프로세스만 추적가능하다. 자식 프로세스는 추적할 수 없다. 자식을 추적하려면 '--trace-children=yes' 옵션을 사용해야 한다.

3. static or stack arrays 경계 침범을 검사하지는 못한다.

 

  • valgrind 실행하는 방법
valgrind --leak-check=full -v --trace-children=yes --log-file='저장할 로그 path' 'test할 실행파일의 위치'

'test할 실행파일'을 valgrind로 실행시키는데 옵션으로 leak check는 full로하고 -v을 주고 child 프로세스를 체크하면서 로그파일을 남긴다는 뜻이다.

시스템에 따라 한번 실행 시키는데 몇 십분씩 걸리는 경우도 있다. 끈기있게 기다려야 한다.

 

  • valgrind에서 저장한 로그파일 분석

버전과 옵션에 따라 저장내용이 조금씩 달라질 수도 있다.

 

 

  • valgrind 옵션

valgrind --help를 치면 option의 종류에 대해 알 수 있다.

Basic Option 설명

 

Error Report에 대한 Option

 

Replace malloc에 대한 Option

 

uncommon user Option

 

Memcheck User Option

 

 

'karma( 업 ) > linux' 카테고리의 다른 글

고급 Bash 스크립트 가이드( Link 글 )  (0) 2019.05.12
too many file open해결을 위한 명령어  (0) 2019.04.14
strace의 마술  (0) 2017.06.22
한영 변환 단축키 설정  (0) 2017.05.29
Shell Script 참고  (0) 2017.05.26
Posted by 생짜
|

간단하게 말해 pointer형 변수를 참조하겠다는 뜻이다.

아래 코드를 참조하면 이해가 될 것이다.


int a = 5;

int* b = &a;

printf("%d, %d", a, *b); //5, 5로 출력

int*& c = b; //포인터 변수 b를 참조

printf("%d, %d, %d", a, *b, c); //5, 5, 5로 출력

c=10;

printf("%d, %d, %d", a, *b, c); //10, 10, 10로 출력

int d = 3;

b = &d;

printf('%d, %d, %d", a, *b, c); //10, 3, 3로 출력 


 char *str = "Hello";


char *ptr = str;
char *&rptr = str;
char *world = "World";
ptr = world;

printf(str); // Hello 출력


rptr = world;

printf(str); //World 출력



Posted by 생짜
|