- TensorFlow - 구글 머신러닝 플랫폼
- 1. 텐서 기초 살펴보기
- 2. 간단한 신경망 만들기
- 3. 손실 함수 살펴보기
- 4. 옵티마이저 사용하기
- 5. AND 로직 연산 학습하기
- 6. 뉴런층의 속성 확인하기
- 7. 뉴런층의 출력 확인하기
- 8. MNIST 손글씨 이미지 분류하기
- 9. Fashion MNIST 이미지 분류하기
- 10. 합성곱 신경망 사용하기
- 11. 말과 사람 이미지 분류하기
- 12. 고양이와 개 이미지 분류하기
- 13. 이미지 어그멘테이션의 효과
- 14. 전이 학습 활용하기
- 15. 다중 클래스 분류 문제
- 16. 시냅스 가중치 얻기
- 17. 시냅스 가중치 적용하기
- 18. 모델 시각화하기
- 19. 훈련 과정 시각화하기
- 20. 모델 저장하고 복원하기
- 21. 시계열 데이터 예측하기
- 22. 자연어 처리하기 1
- 23. 자연어 처리하기 2
- 24. 자연어 처리하기 3
- 25. Reference
- tf.cast
- tf.constant
- tf.keras.activations.exponential
- tf.keras.activations.linear
- tf.keras.activations.relu
- tf.keras.activations.sigmoid
- tf.keras.activations.softmax
- tf.keras.activations.tanh
- tf.keras.datasets
- tf.keras.layers.Conv2D
- tf.keras.layers.Dense
- tf.keras.layers.Flatten
- tf.keras.layers.GlobalAveragePooling2D
- tf.keras.layers.InputLayer
- tf.keras.layers.ZeroPadding2D
- tf.keras.metrics.Accuracy
- tf.keras.metrics.BinaryAccuracy
- tf.keras.Sequential
- tf.linspace
- tf.ones
- tf.random.normal
- tf.range
- tf.rank
- tf.TensorShape
- tf.zeros
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
2. 간단한 신경망 만들기¶
■ Table of Contents
1) Neural Network 구성하기¶
아래의 예제는 Tensorflow의 가장 간단한 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는 입력 데이터의 형태를 결정합니다.
2) 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 공식 문서를 참고하세요.
3) Neural Network 훈련하기¶
Sequantial 클래스의 fit() 메서드는 주어진 입출력 데이터에 대해 지정한 횟수만큼 Neural Network를 훈련합니다.
훈련이 이루어질 때마다, 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)는 주어진 데이터를 한 번 훈련하는 단위입니다.
4) Neural Network 예측하기¶
Sequantial 클래스의 predict() 메서드를 사용하면 특정 입력에 대해 Neural Network가 출력 (예측)하는 값을 얻을 수 있습니다.
pred = model.predict([5.0])
print(pred)
[[8.993531]]
훈련이 끝난 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)
Epoch 1/500
1/1 [==============================] - 0s 1ms/step - loss: 49.7585
Epoch 2/500
1/1 [==============================] - 0s 880us/step - loss: 39.5407
Epoch 3/500
1/1 [==============================] - 0s 981us/step - loss: 31.4938
Epoch 4/500
1/1 [==============================] - 0s 921us/step - loss: 25.1550
Epoch 5/500
1/1 [==============================] - 0s 1ms/step - loss: 20.1601
Epoch 6/500
1/1 [==============================] - 0s 2ms/step - loss: 16.2229
Epoch 7/500
1/1 [==============================] - 0s 1ms/step - loss: 13.1178
Epoch 8/500
1/1 [==============================] - 0s 943us/step - loss: 10.6675
Epoch 9/500
1/1 [==============================] - 0s 3ms/step - loss: 8.7327
Epoch 10/500
1/1 [==============================] - 0s 2ms/step - loss: 7.2035
...
Epoch 200/500
1/1 [==============================] - 0s 3ms/step - loss: 0.0328
Epoch 201/500
1/1 [==============================] - 0s 2ms/step - loss: 0.0321
Epoch 202/500
1/1 [==============================] - 0s 2ms/step - loss: 0.0315
Epoch 203/500
1/1 [==============================] - 0s 1ms/step - loss: 0.0308
Epoch 204/500
1/1 [==============================] - 0s 2ms/step - loss: 0.0302
Epoch 205/500
1/1 [==============================] - 0s 2ms/step - loss: 0.0296
Epoch 206/500
1/1 [==============================] - 0s 2ms/step - loss: 0.0290
Epoch 207/500
1/1 [==============================] - 0s 2ms/step - loss: 0.0284
Epoch 208/500
1/1 [==============================] - 0s 2ms/step - loss: 0.0278
Epoch 209/500
1/1 [==============================] - 0s 2ms/step - loss: 0.0272
...
Epoch 490/500
1/1 [==============================] - 0s 1ms/step - loss: 7.9806e-05
Epoch 491/500
1/1 [==============================] - 0s 5ms/step - loss: 7.8166e-05
Epoch 492/500
1/1 [==============================] - 0s 3ms/step - loss: 7.6561e-05
Epoch 493/500
1/1 [==============================] - 0s 13ms/step - loss: 7.4988e-05
Epoch 494/500
1/1 [==============================] - 0s 3ms/step - loss: 7.3448e-05
Epoch 495/500
1/1 [==============================] - 0s 3ms/step - loss: 7.1940e-05
Epoch 496/500
1/1 [==============================] - 0s 3ms/step - loss: 7.0462e-05
Epoch 497/500
1/1 [==============================] - 0s 2ms/step - loss: 6.9013e-05
Epoch 498/500
1/1 [==============================] - 0s 2ms/step - loss: 6.7596e-05
Epoch 499/500
1/1 [==============================] - 0s 2ms/step - loss: 6.6209e-05
Epoch 500/500
1/1 [==============================] - 0s 3ms/step - loss: 6.4849e-05
[[8.993531]]