### 2021.12.16

Neural Network 구성하기

import tensorflow as tf
from tensorflow import keras
import numpy as np

model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

tf.keras (tensorflow.keras)는 TensorFlow의 하이레벨 구현을 위한 Keras API 모듈입니다.

tf.keras 모듈의 Sequential 클래스는 Neural Network의 각 층을 순서대로 쌓을 수 있도록 합니다.

tf.keras.layers 모듈의 Dense 클래스는 (완전 연결된) 하나의 뉴런층을 구현합니다.

units는 뉴런 또는 출력 노드의 개수를 의미하며, 양의 정수로 설정합니다.

input_shape는 입력 데이터의 형태를 결정합니다.

 

Neural Network 컴파일하기

model.compile(loss='mean_squared_error', optimizer='sgd')

다음으로 Neural Network 모델을 컴파일하는 과정에서는,

모델의 학습에 필요한 손실함수 (loss function)와 옵티마이저 (optimizer)를 결정합니다.

손실함수는 Neural Network의 예측이 얼마나 잘 맞는지 측정하는 역할을 하고, 옵티마이저는 더 개선된 예측값을 출력하도록 최적화하는 알고리즘입니다.

예제에서는 각각 mean_squared_error와 SGD (Stochastic Gradient Descent)로 설정했습니다.

경우에 따라 다른 손실함수와 옵티마이저가 더 효과적일 수 있습니다.

더 자세한 내용은 TensorFlow 공식 문서를 참고하세요.

 

Neural Network 훈련하기

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)

model.fit(xs, ys, epochs=500)

xs, ys는 Neural Network의 훈련에 사용할 입력과 출력 데이터이며, ‘y = 2x - 1’의 관계를 갖는 것처럼 보입니다.

에포크 (epoch)는 주어진 데이터를 한 번 훈련하는 단위입니다.

 

Neural Network 예측하기

Sequantial 클래스의 predict() 메서드를 사용하면 특정 입력에 대해 Neural Network가 출력 (예측)하는 값을 얻을 수 있습니다.

in[]
pred = model.predict([5.0])
print(pred)

#out[]
[[8.995342]]

훈련이 끝난 Neural Network에 숫자 5.0을 입력하면, 약 8.99를 출력합니다.

비록 작은 오차가 있지만, 이제 이 간단한 Neural Network는 어떤 입력 x에 대해서 대략 2x - 1를 출력하도록 훈련되었습니다.

작은 오차가 발생하는 이유는 ‘여섯 개’라는 적은 양의 입출력 데이터를 훈련에 사용했기 때문이고,

또한 모든 x에 대해, 입출력의 관계가 ‘y = 2x - 1’이 아닐 가능성이 있기 때문입니다.

전체 코드

import tensorflow as tf
from tensorflow import keras
import numpy as np

model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)

model.fit(xs, ys, epochs=500)

pred = model.predict([5.0])
print(pred)

 

+ Recent posts