SW Engineering/머신러닝 딥러닝 25

Python Multiprocessing(Process)을 사용한 데이터 처리 속도 개선

Python Multiprocessing(Process)을 사용한 데이터 처리 속도 개선 · Version : MAC OS, Python 3.X, PIP3 대용량 데이터를 효율적으로 처리하기 위해서는 병렬 처리를 활용하는것이 좋다. 파이썬에서 병렬처리를 제공하는 대표적인 라이브러리는 Threading과 Multiprocessing 모듈이다. Threading 모들은 파이썬의 GIL(Global Interpreter Lock)라는불리우는 잠금 모델을 사용하기 때문에I/O 작업이 아닌 CPU 작업이 많을 경우 오히려 성능이 저하된다. 이 방식은 Lock을 풀고 스레드를 교환하고 다시 Lock을 거는 형태의 멀티스레드이기 떄문이다. 파이썬에서는 Multiprocessing 를 권장하고 있으며, 이 모듈에는 대..

Python Multiprocessing(Pool)을 사용한 데이터 처리 속도 개선

Python Multiprocessing(Pool)을 사용한 데이터 처리 속도 개선 · Version : MAC OS, Python 3.X, PIP3 대용량 데이터를 효율적으로 처리하기 위해서는 병렬 처리를 활용하는것이 좋다. 대부분의 머신러닝/딥러닝에 사용되는 프레임워크들은 함수 내부에서 병렬처리가 가능하도록 설계되어 있기 때문에 시스템의 자원을 효율적으로 사용하지만, 일반적으로 많이 사용되는 데이터 가공 모듈인 pandas와 같은 모듈은 병렬처리를 기본적으로 제공하지 않기 떄분에 별도의 병렬처리가 가능하도록 코딩을 해야한다. 파이썬에서 병렬처리를 제공하는 대표적인 라이브러리는 Threading과 Multiprocessing 모듈이다. Threading 모들은 파이썬의 GIL(Global Interpr..

Python에서 Yahoo 주식 데이터 가져오기

Python에서 Yahoo 주식 데이터 가져오기 · Version : MAC OS, Python 3.X, PIP3 Yahoo Finance(https://finance.yahoo.com/) 에서 제공하는 API를 사용하여 Python에서 주식 데이터를 가져오는 방법에 대해서 알아본다. Yahoo Finance API는 종류가 다양하며 각 API에서 제공하는 데이터도 조금씩 다르다. 단순한 시계열 데이터 부터, 기업 재무제표를 제공하는 API등 다양하게 제공한다. 다양한 파이썬 패키지로 제공되고 있으며 아래 링크에서 확인할 수 있다. · yahoo-finance-api : https://github.com/topics/yahoo-finance-api?l=python 이번 포스트에서는 일일 주가 데이터를 제..

Python에서 Tesseract 사용하기

Python에서 Tesseract 사용하기 · Version : MAC OS, Python 3.X, PIP3 이전 포스트에서 Tesseract 오픈소스 소프트웨어를 사용하여 이미지에 포함된 문자열을 추출하는 방법에 대해서 알아 보았다. · Tesseract를 활용한 이미지 속 문자인식 : https://sungwookkang.com/1475 다른 포스트에도 언급한바 있지만, 이미지의 경우 배경 색상이나, 글꼴, 언어 타입에 따라 인식률에 차이가 크므로, 전처리 과정이 수반되어야 어느정도 정확도를 높일 수 있다. OpenCV등 오픈소스로 공개된 다양한 이미지 처리 모듈을 사용하기 위해서는 파이썬을 활용할 수 있는데, 그 시작으로 파이썬에서 Tesseract를 임포트하여 사용하는 방법을 설명한다. 이번 포스..

Tesseract를 활용한 이미지 속 문자인식

Tesseract를 활용한 이미지 속 문자인식 Tesseract는 이미지로부터 텍스트를 인식하고 추출하는 소프트웨어이며 HP 연구에서에서 개발된 오픈소스 OCR 엔진이다. 현재까지도 LSTM(Long short-term memory)과 같은 딥러닝 방식을 통해 텍스트 인식률을 지속적으로 개선하고 있다. Tesseract를 사용하기 위해서는 관련 프로그램을 설치 해야한다. 프로그램은 아래 주소에서 다운로드 받을 수 있다. · https://github.com/tesseract-ocr/tesseract/wiki 필자의 경우 MAC OS에서 설치를 진행하였으며 home brew를 사용하여 설치 하였다. brew install tesseract brew로 설치한 경우 아래 명령으로 설치된 경로를 확인할 수 있다..

과대적합(Over fitting)과 과소적합(Under fitting)

과대적합(Over fitting)과 과소적합(Under fitting) 머신러닝에서 학습과정은 패턴을 발견하기 위해 모델링을 만드는 단계라고 할 수 있다. 일반적으로 모델을 만들 때에는 데이터를, 트레이닝 데이터 (training)와 테스트 데이터(test)를 나누어 사용한다. 트레이닝 데이터를 반복적으로 학습함으로써 테스트 데이터 또는 실제 데이터와 가장 유사한 결과를 만들어 내는 것을 목표로 하고 있다. 하지만 트레이닝 데이터와 테스트 데이터가 비슷하다면 모델의 정확도는 매우 높게 나올 것이다. 하지만 모델이 복잡하다면 트레이닝 데이터와 테스트 데이터의 결과는 다르게 나타날 확률이 높다. 일반적으로 트레이닝 데이터는 실제 데이터를 샘플링 하거나 특정 패턴을 인식시키기 위한 데이터로 트레이닝 데이터에 ..

경사 하강법(Gradient Descent)

경사 하강법(Gradient Descent) 경사 하강법(Gradient Descent)은 머신러닝 및 딥러닝 알고리즘을 학습시킬때 사용하는 방법 중 하나이며 1차 근삿값 발견용 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사)를 구하여 기울기가 낮은 쪽으로 계속 이동시켜 극값(최적값)에 이를 때까지 반복하는 것이다. 해당 함수의 최소값 위치를 찾기 위해 비용 함수(Cost Function)의 경사 반대 방향으로 정의한 Step Size를 가지고 조금씩 움직여 가면서 최적의 파라미터를 찾으려는 방법이다. 여기에서 경사는 파라미터에 대해 편미분한 벡터를 의미하며 이 파라미터를 반복적으로 조금씩 움직이는 것이 관건이다. 경사 하강법에서는 학습시 스텝의 크기 (step size)가 중요하다. 학습률이 너..

순전파(Feedforward)와 역전파(Backpropagation) 개념

순전파(Feedforward)와 역전파(Backpropagation) 개념 다층 퍼셉트론(Multi-layer Perceptron, MLP)으로 학습 한다는 것은 최종 출력값과 실제값의 오차가 최소화 되도록 가중치와 바이어스를 계산하여 결정하는 것이다. 순전파 (Feedforward) 알고리즘 에서 발생한 오차를 줄이기 위해 새로운 가중치를 업데이트하고, 새로운 가중치로 다시 학습하는 과정을 역전파 (Backpropagation) 알고리즘 이라고 한다. 이러한 역전파 학습을 오차가0에 가까워 질 때까지 반복한다. 역전파 알고리즘을 실행할때 가중치를 결정하는 방법에서는 경사하강법이 사용된다. [순전파 (Feedfoward)] 입력층에서 은닉층 방향으로 이동하면서 각 입력에 해당하는 가중치가 곱해지고, 결과..

다층 퍼셉트론 (Multi-layer Perceptron)

다층 퍼셉트론 (Multi-layer Perceptron) 퍼셉트론은 사람 뇌의 단일 뉴런이 작동하는 방법을 흉내내기 위해 환원 접근법 (reductionist approach)을 이용한다. 이 방법은 초기 가중치를 임의의 값으로 정의하고 예측값의 활성 함수 리턴값과 실제 결과값의 활성 함수 리턴값이 동일하게 나올 때까지 가중치의 값을 계속 수정하는 방법이다. 단층 퍼셉트론의 경우 AND, NAND, OR 논리회로를 계산할 수 있지만 XOR 게이트 연산을 할 수 없다. XOR 게이트는 베타적 논리합 이라 불리는 회로이다. 이 뜻은 한쪽이 1일 때만 1을 출력한다 퍼셉트론 이론은 선형 분류이다. 즉 직선을 이용한 분류는 가능하지만 XOR 게이트와 같은 경우 곡선으로 나눌 수 있기 때문에 비선형 분류이다. ..

단층 퍼셉트론 (Single-layer Perceptron)

단층 퍼셉트론 (Single-layer Perceptron) 퍼셉트론 (Perceptron)은 1957년 코넬 항공 연구소에 근무하던 프랑크 로젠블라트(Frank Rosenblatt)가 MCP 뉴런 모델을 기초로 퍼셉트론이라는 알고리즘을 고안하였다. 퍼셉트론은 하나의 MCP 뉴런이 출력신호를 발생할지 안할지 결정하기 위해 MCP 뉴런으로 들어오는 각 입력값에 곱해지는 가중치 값을 자동적으로 학습하도록 한 모델이며 입력 벡터를 두 부류(class)로 구분하는 선형 분류기 이다. 퍼셉트론은 신경망(딥러닝)의 기원이 된 알고리즘이다. 퍼셉트론은 다수의 신호를 입력 받아 하나의 신호를 출력한다. 여기서 말하는 신호는 전류처럼 흐름이 있는것을 뜻하며, 흐름의 상태 정보를 앞으로 전달한다. 아래 그림은 x1, x2..