Writer: Harim Kang
해당 포스팅은 '시작하세요! 텐서플로 2.0 프로그래밍'책의 흐름을 따라가면서, 책 이외에 검색 및 다양한 자료들을 통해 공부하면서 정리한 내용의 포스팅입니다. 해당 내용은 딥러닝을 이용한 회귀에 대한 내용을 담고 있습니다. 사용 라이브러리는 Tensorflow 2.0 with keras입니다.
Squential 모델과 Dense 레이어를 사용한 간단한 네트워크를 형성하여 회귀 네트워크를 만들어보겠습니다. 앞선 포스팅에서 만든 XOR 연산 네트워크 또한 회귀 네트워크의 하나라고 할 수 있습니다.
일반적으로 numpy, tensorflow, sklearn 라이브러리를 사용한 회귀 방법이 있습니다. 이것은 머신러닝 (7) 포스팅에 정리하였습니다.
2020/02/12 - [IT/Machine Learning] - 머신러닝 (7) - Regression(회귀)
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
x = 2 * np.random.rand(100, 1)
y = 4 + 3 * x + np.random.randn(100, 1)
x값의 범위는 0부터 2의 범위의 랜덤값, y값의 범위는 y=3x+4에 0과 1사이의 랜덤값을 추가한 값입니다. y=3x+4의 경향을 가진 데이터라고 보시면 됩니다.
위의 그림과 같은 네트워크를 만들어보겠습니다.
model = tf.keras.Sequential([
tf.keras.layers.Dense(units=6, activation='tanh',input_shape=(1,)),
tf.keras.layers.Dense(units=1)
])
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1), loss='mse')
간단하게 뉴런 6개의 1단 레이어 하나와 뉴런 1개의 2단 레이어를 만들었습니다. 활성함수는 하이퍼볼릭 탄젠트(tanh)함수를 사용하였습니다. 출력 값이 -1과 1사이의 값이 나오는 함수입니다.
최적화 함수(optimizer)는 SGD를 사용하고, 손실 값 기준은 mse를 사용하였습니다.
모델의 요약을 출력하면 아래와 같습니다.
그림의 모양과 유사하면서, Param의 수가 일치하는 것을 확인 할 수 있습니다. 이제 네트워크 모델에 훈련을 시키겠습니다.
history = model.fit(x, y, epochs=100)
100회 반복 학습을 시켰습니다. 그 결과를 확인하면 아래와 같습니다.
x_pred = np.arange(min(x), max(x), 0.01)
y_pred = model.predict(x_pred)
plt.plot(x, y, 'bo')
plt.plot(x_pred, y_pred, 'r-')
plt.show()
확인을 한 결과 어느정도 경향성이 나타나는 그래프가 그려지는 것을 확인 할 수 있습니다.
해당 실습 코드는 아래의 깃허브 링크를 통해 확인이 가능합니다.
https://github.com/harimkang/tensorflow2_deeplearning/blob/master/regression_2.ipynb
딥러닝 (6) - CNN (Convolutional Neural Network) (2) | 2020.02.24 |
---|---|
딥러닝 (5) - 분류(Classification) 네트워크 (1) | 2020.02.24 |
딥러닝 (3) - AND, OR, XOR 연산 신경망 만들기 (0) | 2020.02.07 |
딥러닝 (2) - 텐서플로우 2.0 기초와 뉴런 만들기 (2) | 2020.02.06 |
딥러닝 (1) - Deep Learning 소개 및 용어 정리 (0) | 2020.02.04 |