달력

112024  이전 다음

  • 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
  • 29
  • 30

 

 

 

 

학습한 결과값이 조금 잘못 나왔다.

Posted by 생짜
|

이 번에는 바로 전보다 레이어를 하나 더 추가해서 학습시켜보자

 

학습시킬 데이타를 정의한다.

 

검증할 데이타를 정의한다.

 

학습시킬 모델을 생성하고 모델을 통해 각 레이어를 연결한다.

 

만든 모델의 정의를 확인한다.

 

그림으로 확인하면 

첫 번째 레이어의 Param이 4인 이유는 wx1, b1, wx2, b2 이기 때문이다.

두 번째 레이어의 Param이 3인 이유는 b3로 들어가는 입력값 두 개에 b3까지 총 3개이기 때문이다.

 

결과 값, 레이어와 노드를 더 두었더니 결과 값이 좋아졌다.

Posted by 생짜
|

 

keras에서는 모델을 만드는데 두 가지 방법이 있는데 Sequential 모델은 순차적으로 레이어 층을 더해주기 때문에 순차모델이라 불리고 만들기도 쉽다.

 

모델에 입력하여 학습할 데이터와 출력할 값을 정의한다.

 

입력과 출력 데이타의 shape과 dim의 값을 출력한다. 2차원 배열인 것을 알 수 있다.

 

검증할 데이터를 정의한다.

 

케라스로 Sequential 모델을 만든다.

 

Dense 클래스를 이용하영 NN 레이어의 노드를 만든다.

WARNING은 무시하자.

이 모델을 그림으로 그리면 아래와 같다.

입력도 출력도 하나인 node를 가지고 있는 단층 레이어이다. model.summary로 형태를 확인하면 그림처럼 Dense는 하나, Output Shape도 하나, Param은 w와 b이렇게 두 개이다. Dense를 정의할 때 'input_shape=(1,)' 대신 'input_dim=1' 이렇게 정의해도 된다. input_shape에서 (1,)은 행의 갯수를 뜻하고 input_dim에서 1은 입력 차원을 뜻한다.

Dense 는 입력과 출력을 모두 연결해주는 NN 레이어이다. keras에서는 Dense가 클래스로 구현되어 있다. Dense로 만든 node는 각각 W, B를 가진다. 

 

model의 fit함수를 호출하여 학습시킨다.

 

 

학습 후 결과, 학습이 잘되지 않은 것을 볼 수 있다. 하나의 노드를 가지고서는 충분한 학습이 되지 않는 것 같다.

Posted by 생짜
|

keras와 tensorflow를 import 하면 텐서플로우를 사용할 수 있다면 메시지가 나온다.

 

pip로 설치한 keras와 tensorflow의 버전을 확인한다.

 

GPU를 사용중인지 체크합니다.

 

어떤 Device를 사용중인지 체크합니다.

Posted by 생짜
|
  • tesorflow-cpu 버전 설치

나는 노트북을 사용하고 있어 NVIDIA GPU가 없다. 선택의 여지가 없이 cpu 버전을 설치했다. 나중에 외장형 NVIDIA GPU를 설치해볼 예정이다.

Anaconda를 설치하지 않았기 때문에 Native PIP를 이용해서 설치를 한다. PIP로 설치하면 install 명령어 하나로 간단하다. vertualenv 가상환경을 실행 시킨후 pip를 이용하여 tensorflow를 설치한다.

 

pip install --upgrade tensorflow

 

tensorflow를 처음 설치한다면 --upgrade 옵션이 필요없다. tensorflow가 설치되어 있다면 upgrade를 하라는 옵션이다.

나는 python 3.7.3과 vertualenv를 사용하고 있어 Anaconda를 사용하지 않았다.

 

vertualenv 가상환경에서 tensorflow cpu 버전 설치
tensorflow 설치 후 pip list 명령어로 확인

 

 

  • tensorflow-gpu 버전 설치

tensorflow gup 버전 설치 역시 vertualenv 환경에서 pip로 쉽게 할 수 있지만 pip로 설치하기 전 NVIDIA GPU dirver 업데이트 및 NVIDI Toolkit 설치와 환경변수 설정 등 해야할 일이 몇가지 더 있다. 

tensorflow gpu 버전을 설치하기 위해 NVIDIA 페이지에 들어가 CUDA를 다운로드하여 설치해야 한다.

 

  • CUDA 및 cuDNN 설치 순서/방법
  1. 내 PC의 '장치관리자'에 들어가 GPU가 NVIDIA 인지 확인 후 드라이버 업데이트를 한다.
  2. https://www.tensorflow.org 에 접속한다.
  3. 아래 'NVIDIA CUDA Toolkit 및 cuDNN SDK 다운로드' 그림과 같이 tensorflow페이지에서 install->GUP support를 선택 후 CUDA Toolkit과 cuDNN SDK를 다운로드한다.
  4. 다운로드한 CUDA Toolkit을 설치한다.
  5. CUDA Toolkit 설치 후 다운받은 cuDNN의 압축을 푼다.
  6. cuDNN의 압축을 푼 후 'cuda' 폴더 밑에 'bin', 'inculude', 'lib' 폴더가 생긴다.
  7. cuDNN의 cuda 폴더 밑에 생긴 폴더의 파일들을 CUDA Toolkit 설치 폴더에 복사하는데 각 파일들은 경로에 맞게 복사해야 한다.
  8. 각 파일들 복사가 끝나면 CUDA Toolkit을 설치한 폴더 밑의 cuda\bin 폴더, 예를 들어 'C:\Program Files\CUDA\bin' 폴더의 path를 환경변수의 'PATH'에 설정한다. 이 설정을 안해주면 나중에 python에서 tensorflow를 사용할 때 콘솔창에 drive_init() error가 나오면서 tensor가 실행이 안될 수 있다.
  9. 환경변수의 PATH에 'cuda\bin\'폴더를 설정해 주기 전에 꼭 cuDNN 압축푼 폴더의 'cuda\bin\' 폴더의 파일 및 cuDNN 폴더 밑의 파일들을 '7번' 처럼 복사해줘야 한다.

 

 

NVIDIA CUDA Toolkit 및 cuDNN SDK 다운로드

 

CUDA Toolkit  및 cuDNN 설치가 끝나면 이제 vertualenv를 실행 시킨 후 tensorflow-gpu 버전만 pip로 설치하면 끝이다.

 

pip install --upgrade tensorflow-gpu

 

 

  • keras 설치

tensorflow( cpu/gpu 버전 모두해당 )를 설치했다면 keras를 pip로 설치한다.

 

pip install keras

 

pip로 keras 설치화면

 

python에서 pip로 tensorflow gpu 버전 및 cpu 버전 설치와 keras 설치가 끝났다.

이제 내가 좋아하는 coding을 할 수 있다. ㅎㅎㅎ

Posted by 생짜
|

영상처리가 원본 영상을 사용자가 원하는 새로운 영상으로 바꿔 주는 기술이라면 컴퓨터 비전은 영상처리 개념을 포함하는 좀 더 포괄적인 의미로 영상에서 의미 있는 정보를 추출해 주는 기술을 말한다.

영상처리는 말 글대로 영상에 여러가지 연산을 가해 원하는 결과를 새롭게 얻어내는 과정으로 이미지 프로세싱이라고 한다. 영상처리의 주된 목적은 더 좋은 품질의 영상을 얻으려는 것이다.

  • 영상(화질) 개선
  • 영상복원
  • 영상분활(원하는 부분만 오려내는 과정)

 

컴퓨터 비전은 

  • 객체 검출
  • 객체 추적
  • 객체 인식 

등이 있다. 

 

객체의 검출, 추적, 인식 등 비전 작업을 하기 전에 영상의 화질을 개선하는 영상처리 작업을 하는 것이 일반적이다. 영상에서 객체를 인식하려 하는데 화질이 나쁘면 인식이 잘 되지 않을 것이다. 전처리 작업으로 화질 개선만 있는 것이 아니다. 고화질의 영상은 객체를 인식하는데 불필요한 연산이 많이 필요할 수 있어 영상을 단순화 하는 작업도 전처리 작업으로 많이 한다.

 

우리가 영상에서 원하는 결과를 얻기 위해서는,

  • 입력받은 영상을 노이즈를 없에거나 엣지를 살리는 등의 전처리를하여 
  • 원하는 품질로 바꾼 후
  • 원하는 객체를 추적하여 얻어낸다.

위의 과정을 원하는 결과를 얻을 때까지 계속 반복하는 것이 컴퓨터 비전이하는 일이다.

 

컴퓨터 비전으로 할 수 있는 분야는 

  • Image Processing
    • Image Enhancement
    • Filter
    • Rotation
    • Hough Transforms
    • Histogram
  • Robot/Machine/Video/Vision
    • Tracking
    • Feature description
  • Artificial Intelligence
    • Pattern Recognition
    • Maching Learning
    • Deep Learning
  • 3D Geometry
    • Camera Calibration
    • 3D reconstruction
    • Stereo Camera

등이 있다.

 

OpenCV는 컴퓨터비전라이브러리의 줄임말로 영상처리와 컴퓨터 비전 프로그래밍 분야의 가장 대표적인 lib이다.

OpenCV는 C/C++ 언어로 작성되었지만 파이썬, 자바 언어를 바인딩 언어로 공식지원하고 있으면 윈도우, 리눅스, OSX, 안드로이드, iOS까지 지원하고있다.

 

OpenCV의 공식 웹사이트는 

https://opencv.org/

 

OpenCV

Overview OpenCV.org, in partnership with Big Vision LLC (owner of LearnOpenCV.com) has launched a

opencv.org

 

이고 opencv-python tutroal 웹사이트는

https://opencv-python-tutroals.readthedocs.io/en/latest/index.html#

 

Welcome to OpenCV-Python Tutorials’s documentation! — OpenCV-Python Tutorials 1 documentation

Docs » Welcome to OpenCV-Python Tutorials’s documentation! Edit on GitHub © Copyright 2013, Alexander Mordvintsev & Abid K. Revision 43532856. Built with Sphinx using a theme provided by Read the Docs.

opencv-python-tutroals.readthedocs.io

이다.

 

OpenCV는 main / extra 두 개의 저장소로 나누어 소스 코드를 관리한다.

메인 저장소는 OpenCV에서 공식 배포하는 코드를 관리하고 엑스트라 저장소는 contrib 저장소라고도 하는데 beta 버전의 소스코드들이 있다. OpenCV의 공식 배포판은 BSD 라이센스로 연구와 상업용도와 무관하게 무료로 사용할 수 있으면 OpenCV를 활용해서 만든 소스 코드를 오픈할 의무는 없다.

 

 

 

Posted by 생짜
|

인공지능의 구현방법에는 지식공학(합리주의/이성주의), 머신러닝/기계학습(경험주의)로 나눌 수가 있다. 

지식공학은 특정한 존재가 대상에게 제공한다. 룰베이스의 Top-down 방식으로 1980년대 전문가 시스템이 이러한 인공지능으로 구현되어 있다.

 

머신러닝/기계학습은 컴퓨터가 데이터로부터 지식을 직접 학습 하는 방법 Bottom-up으로 현재의 딥러닝이다. 

 

기계학습은 인공지능을 구현하기 위한 한 가지 방법으로 데이타로부터 지식을 학습한다. 신경망은 데이터로 부터 우리 되뇌가 데이터를 학습하는 방법을 모사한 방법이고 신경망은 기계학습의 한 종류이다.

딥러닝은 신경망인데 신경망의 깊이가 깊은 모델을 말한다.

 

 

'인공지능 > 기계학습 > 신경망 > 딥러닝' 이라고 할 수 있다.

 

그럼 왜? 이 시대에 머신러닝일까?

 

네트워크로 연결된 Big Data가 머신러닝을 할 수 있는 기반을 만들어 주었기 때문이다. 즉 네트워크의 혁명이 없었다면 머신러닝 기반의 인공지능도 없었을 것이다.( 1980년대에는 인터넷이 없었기 때문에 룰베이스의 인공지능이 많이 사용되었다)

Posted by 생짜
|
Posted by 생짜
|

Google 머신러닝 용어집 Link



Deep Leaning

신경망 알고리즘을 주로 사용하는 머신 러닝의 한 분야로 다층 신경망을 사용한 기계학습 방법론.


퍼셉트론

하나의 신경세포를 인공적으로 모델링한 뉴런


퍼셉트론 알고리즘 작동방식

뉴런 하나로 입력되는 정보가 X1, X2 두 개라고 할 때 입력 값에 각각 가중치 W1,W2를 곱한 후 더한다.

즉 결과 값은  X1*W1 + X2*W2 가 된다. 이 값을 어떤 기준과 비교하여 만족스러운 결과가 나오도록 가중치 W1, W2를 조금씩 조정한 후 그 결과값을 다시 다음 뉴런에게 전달한다.


CNN(합성곱 신경망)

이미지 안의 물체를 인식하거나 이미지의 장면을 글로 요약하는데는 CNN 구조가 많이 사용된다.

특정한 이미지 처리를 수행하는 층이 여러 개 쌓인 구조를 갖는 층간의 결합 밀도가 낮은 신경망


TensorFlow(텐서플로)

데이터 플로 그래프를 사용해서 수치 연산을 하는 라이브러리. 그래프의 노드는 수학 연산을 나타내고 노드를 연결한는 그래프의 에지는 다차원 데이터 배열을 나타낸다.

텐서플로는 수치 연산을 기호로 표현한 그래프 구조를 만들고 처리한다는 기본 아이디어를 바탕으로 구현. CPU, GPU의 장점을 모두 이용할 수 있고 안드로이드 iOS 같은 모바일 플랫폼은 물론 맥OS X와 같은 64비트 리눅스에서도 바로 사용할 수 있다. 또 다른 강점은 알고리즘이 어떻게 돌아가고 있는지 알려주기 위해 많은 정보를 모니터링하고 디스플레이해주는 텐서보드 모듈이 있다.

Tensor란 Matrix 혹은 다차원의 Array을 의미한다. 동적 사이즈의 다차원 데이터 배열을 실어 나르는데서 텐서플로우라는 이름이 지어졌다.


선형회귀분석(linear regression)

변수들 사이의 관계를 분석하는 데 사용하는 통계학적 방법, 이 방법의 장점은 알고리즘의 개념이 복잡하지 않고 다양한 문제에 폭넓게 적용할 수 있다는 것이다. 독립변수 Xi, 상수한 b와 종속변수 y 사이의 관계를 모델링하는 방법으로 두 변수 사이의 관계일 경우 단순회귀라고 하며 여려 개의 변수를 다루는 다중회귀도 있다.


경사하강법(gradient descent)

일련의 매개변수로 된 함수가 주어지면 초기 시작점에서 함수의 값이 최소화되는 방향으로 매개변수를 변경하는 것을 반복적으로 수행하는 알고리즘이다. 함수의 기울기를 음의 방향쪽으로 진행하면서 반복적으로 최적화를 수행한다. 보통 양의 값을 만들기 위해 거리 값을 제곱하며 기울기를 계산해야 하므로 오차함수는 미분 가능해야 한다.


K-평균 알고리즘(K-means algorithm)

군집화 문제를 풀기 위한 자율 학습 알고리즘의 일종. 간단한 방법으로 주어진 데이터를 지정된 군집개수(K)로 그룹화한다.


Tensor

원래 의미는 2차원 이상, 임의의 차원을 가진 배열을 뜻한다. 텐서플로우는 방향성이 있는 그래프 구조로 모델을 구성하는데 이때 그래프는 0개 이상의 입출력을 갖는 노들의 연결체이며 노드는 operation의 instance라고 할 수 있다.


Operation

텐서플로우에서 계산이 일어나는 단계를 의미한다. Tensor를 만들고 흐름을 구성하면서 흐름과 흐름 사이에서 자료의 곱셈이나 더하기, 뺄셈 등의 계산을 하는 단계이다. 다양한 속성 값(attribute)를 가질 수 있다.


Session

세션은 텐서플로우에서 graph를 구성한 후 실제 graph를 수행 할 수 있게 만들어 주는 프로그램을 의미 한다. 텐서플로우는 다양한 실행 환경(CPU, CPU/GPU, 원격 분산처리)에서 graph를 생성하고 이를 실행하기 위해 Client에서 session을 만들어 전달한다.


GPU 가속 컴퓨팅

CPU와 GPU의 차이는 그 작업 처리 방식을 비교해보면 하나의 CPU는 직렬 처리에 최적화된 몇 개의 코어로 구성된 반면, GPU는 병렬 처리용으로 설계된 수 천개의 보다 소형이고 효울적인 코어로 구성되어 있다. 

NVIDIA에서 2007년에 개발한 GPU 가속 컴퓨팅은 그래픽 처리 장치와 CPU를 함께 이용하여 Application의 처리속도를 높이는 것을 말한다. Application의 연산 집약적인 부분을 GPU로 넘기고 나머지 코드만을 CPU에서 처리하는 GPU 가속 컴퓨팅은 강력한 Application의 성능을 제공하여 App의 속도가 놀라울 정도로 빨라 졌음을 느낄 수있다.






Posted by 생짜
|