본문 바로가기
컴퓨터·IT/<노코딩 AI >

07. 몇 줄의 코드로 하는 AI_텐서플로

by BOOKCAST 2022. 7. 2.
반응형

 


 

수만 줄을 단 몇 줄의 코드로

회귀와 분류 문제를 해결하기 위한 지도학습 알고리즘으로 Decision Tree, Random Forest KNN, SVM, Neural Network가 있다. 모두 머신 러닝 문제를 해결하는데 사용하는 알고리즘이다. Neural Network는 인간의 뇌를 모방해 만들어진 알고리즘으로 인공신경망, 딥 러닝이라고 한다.

분석을 위한 코드를 이미 만들어둔 도구를 라이브러리(Library)라고 한다. 텐서플로(TensorFlow), 파이토치(PyTorch), 카페투(Cafffe2), 티아노(Theano) 등이 있는데, 모두 딥 러닝을 할 수 있도록 지원하는 도구이다. 이런 라이브러리를 이용하면 수만 줄의 코드를 몇 줄의 코드만으로 딥 러닝을 할 수 있다.

딥 러닝을 통해 현실의 문제를 해결하기 위해서는 머신 러닝과 딥러닝의 개념을 이해하고 분석하고자 하는 데이터를 다룰 수 있어야 한다. 데이터를 분석하려면 Python 프로그램을 활용해 코드를 짤 수 있어야 한다. 그러나 코딩으로 딥 러닝을 구현하는 것은 쉬운 일이 아니다. 머신 러닝, 딥 러닝, 데이터, 코딩, 수학을 전혀 이해하지 않고서 딥 러닝을 할 수는 없다. 그러나 딥 러닝을 할 수 있는 도구를 활용하면 단 몇 줄의 코드만 알아도 데이터를 분석해서 예측과 분류를 할 수 있다.

딥 러닝 도구인 텐서플로를 이용해 딥 러닝을 실제로 적용해보면 모델 구조 생성과 학습에 관련된 코드를 이해하고 코드들이 동작한 결과를 해석할 수 있다. 딥 러닝 원리와 코딩 방법을 모르더라도 딥 러닝 도구를 자주 활용해 예측 및 분류를 해보면 그 원리와 코드를 이해할 수 있는 것이다.

영문법을 많이 알아도 외국인과 대화를 못 하면 아무 소용이 없다. 서툴러도 몇 마디 대화를 한다면 실력이 차츰 늘고, 나중에는 자연스럽게 영어를 구사하는 원리와도 같다. 텐서플로 같은 분석 도구를 이용하면 최소한의 코드로 AI 기술을 활용한 분류와 예측을 할 수 있기 때문에 코딩을 배울 시간이 없거나 어려움이 있는 사람이라면 딥 러닝을 적용해볼 수 있는 효율적인 방법이다.

구글에서 제공하는 Colaboratory 서비스를 이용해 텐서플로 실습을 해보자. 웹 브라우저에서 쉽게 프로그래밍을 할 수 있는 환경을 제공하는 도구인 jupyter notebook은 데이터를 다루는 사람들이 많이 활용하고 있다. Colab notebook은 jupyter notebook과 같은 기능을 구글 드라이브 내에서 사용할 수 있도록 제공되는 프로그래밍 도구다. 구글 드라이브에서 새로 만들기 메뉴를 눌러, 검색창에 Colaboratory 입력하면 Colaboratory 설치 화면이 나온다. 이를 다운로드해 설치해보자.

Colaboratory가 설치되면 아래의 프로세스로 분석을 진행한다.

1. 텐서플로와 pandas프로그램을 이용하기 위해 Colaboratory로 불러온다.

2. 과거의 데이터를 준비한다.

3. 과거의 데이터에서 문제 해결을 위한 원인(독립변수)과 결과(종속변수)를 찾는다.

4. 모델의 구조를 만든다.

5. 모델을 데이터에 맞게 학습(FIT)한다.

6. 학습 결과에 만족한다면 모델을 완성한다.

7. 완성된 모델을 이용해 예측한다.

손글씨 데이터셋인 MNIST와 컬러 이미지 데이터셋인 CIFAR10을 이용해 이미지를 분류하는 방법을 실습해보자.


아래와 같이 코드를 작성하면 텐서플로에서 자동으로 AI 모델을 만들어준다.


딥 러닝을 위해서는 데이터셋에 대한 이해를 해야 한다. 손글씨 데이터셋인 MNIST와 컬러 이미지 데이터셋인 CIFAR10 데이터셋을 살펴보자.

 

5라는 숫자는 색의 농도에 따라 28*28=784개의 셀에0~255(검정0~흰색255)로 입력된다. 각 숫자는 2차원 형태로 784차원 공간의 한점을 차지하고 있다. 개별 MNIST 데이터셋의 형태는(28,28)이고, 이미지가 60000장이라면, MNIST데이터셋의 형태는(60000,28,28)이다.

컬러 이미지인 CIFAR10의 데이터셋은 아래와 같다.

빨간점 녹색점 파란점 숫자가 각셀에 0~255의 숫자로 들어가 있다. 개별 CIFAR 데이터셋 형태는(32,32,3)이고 3차원 형태로 3072(32*32*3)차원 공간의 한점으로 표현된다. 이미지가 5000장이라면, CIFAR10 데이터셋 형태는 (5000,32,32,3)이다.

 


아래 사진은 실제 찍은 것이다. 사진의 데이터는 이미지 크기가 2448×3264픽셀인데, 세 가지 색으로 구성되므로 2448×3,264×3=23,970,816의 셀이 있다. 이 사진을 학습에 사용하기에는 너무 크므로 데이터 전처리를 통해 용량을 줄여 학습에 사용한다.

 

 


손글씨 데이터셋인 MNIST와 컬러 이미지 데이터셋인 CIFAR10 데이터셋의 shape를 print해보면 MNIST는 3차원 형태로 정답이 60,000개, CIFAR10은 4차원의 형태로 정답이 50,000개라는 것을 확인할 수 있다.

#MNIST
(독립, 종속),_=tf.keras.datasets.mnist.load_data()
print(독립.shape, 종속.shape)
#(60000, 28, 28) (60000,)

#CIFAR10
(독립, 종속),_=tf.keras.datasets.cifar10.load_data()
#(50000, 32, 32, 3) (50000, 1)

이미지 데이터 분석을 위해서는 차원의 개념을 알아야 한다. 표를 공간에 옮기면 기하학적으로 데이터를 해석할 수 있다. 데이터 사이의 거리와 벡터값을 측정해서 데이터의 특성을 더 자세하게 분석할 수 있다.

데이터를 공간에 표현한다는 데이터 공간의 맥락에서 보면 변수의 개수는 공간의 차원수이며 관측치는 N 차원 공간의 한점이다. N 차원의 값을 요인으로 가진 변수는 N+1차원의 배열의 깊이를 가지며 데이터 형태의 맥락에서 변수의 차원 수는 배열의 깊이다.

아래의 d1 변수는 1차원의 변수다. data shape를 print 해보면 데이터가 하나인 1차원 형태라는 것을 알 수 있다. 아래의 표와 같이 N차원의 변수를 요인으로 하는 변수는 N+1차원이 되는 것이다.

 

반응형

댓글