새소식

컴퓨터공학 💻/딥러닝

[딥러닝] Keras 이용한 DNN 퍼셉트론 기본 모델 구현

  • -
퍼셉트론 기본 모델 구현 Tensorflow-keras

 

이전 포스팅에서 배운 멀티 레이어 퍼셉트론 이론을 Tensorflow, keras code를 이용해 직접 모델을 구현합니다. 

반드시 이론을 이해하고 숙지한 상태로 코드를 작성해야 합니다.

 

(손실 함수는 loss function, cost function이며 output은 loss, cost)

 

Google colab 사용자는 keras가 설치되어 있으니 아래 설치 코드는 무시합니다. colab 사용자가 아니라면 아래 세 라이브러리를 설치해줍니다.

pip3 install tensorflow
pip3 install keras
pip3 install numpy
from tensorflow import keras # tensorflow.keras모듈
import numpy as np

x = np.array([0, 1, 2, 3, 4], dtype='float64')
y = x * 2 + 1
print(y)

반드시 numpy array로 리스트를 만들어야 합니다. 기본 array로 만들게 되면 2배를 곱했을 때 리스트 길이가 2배가 될 뿐 값에 반영되지 않습니다.

 

x는 학습 데이터(train data), y는 정답 데이터(label data)입니다. x를 넣었을 때 각각 1, 3, 5, 7, 9를 예측할 수 있느냐에 관한 Dataset 설정입니다. 참고로 레이블 데이터를 제공하고 있기에 이 Dataset은 지도학습법에 해당합니다.

 

model = keras.models.Sequential() # 1
model.add(keras.layers.Dense(1, input_shape=(1,))) # 2
model.compile('SGD', 'mse') # 3
model.fit(x, y, epochs=200) # 4

가장 먼저 모델 설계를 위한 Sequential()의 인스턴스를 생성합니다. 즉 레이어를 만들수 있는 빈 공간을 만드는 과정입니다. # 1

 

Dense layer는 퍼셉트론 레이어를 의미합니다. 왼쪽 변수는 입력과 출력을 해야할 데이터가 1개이면 1, 2개이면 2가 되며 오른쪽 변수는 위 예시에서 1 by 1 행렬을 입력한다는 의미입니다. input_shape으로 작성하는 이유는 선형대수에서 벡터의 집합을 행렬, 행렬의 집합을 텐서(Tensor)라고 보고 가령 이미지 같은 형태가 input 값으로 들어올 때 행렬 데이터로 들어올 수 밖에 없기 때문에 행렬 정보를 입력한다는 의미 때문입니다. # 2

 

optimizer로 Stochastic Gradient Descent를 사용하며 loss function으로 mean squared error를 사용합니다. # 3

 

epochs는 neural network를 학습시킬 때 모든 training data에 대해 완료된 training cycle의 수입니다. epoch가 1이면 전체 데이터셋에 대해 한번 학습을 완료한 상태를 말합니다. # 4

 

이제 한번 코드를 실행해봅시다.

초기 loss값은 40이었다가 학습량이 늘어남에 따라 점점 0에 수렴하는 것을 알 수 있습니다. 학습을 했으니 시험을 해봅시다.

model.predict([2, 7, 9, 13, 100])

위와 같이 train 값을 넣었을 때 비교적 정확한 값을 예측하는 것을 볼 수 있습니다. epochs를 10000번 정도 수행하면 아마 좀 더 정확해지겠죠.

 

여기까지가 기본 구현에 관한 내용입니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.