- 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
7. 뉴런층의 출력 확인하기¶
이전 페이지에서 각 뉴런층의 이름, 자료형, 활성화함수와 같은 다양한 정보를 확인하는 방법에 대해 알아보았습니다.
이 페이지에서는 특정 입력 데이터에 대해 각 뉴런층이 출력하는 값을 확인하는 방법에 대해 소개합니다.
■ Table of Contents
1) 훈련 데이터 준비하기¶
import tensorflow as tf
import numpy as np
tf.random.set_seed(0)
# 1. 훈련 데이터 준비하기
x_train = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
y_train = np.array([[0], [1], [1]])
우선 tf.random 모듈의 set_seed() 함수를 사용해서 랜덤 시드를 설정했습니다.
예제에서 x_train, y_train은 각각 훈련에 사용할 입력값, 출력값입니다.
이 페이지에서는 훈련은 진행하지 않고 입력 데이터 (x_train)에 대해 각 뉴런층이 출력하는 값을 확인합니다.
2) 뉴런층 만들기¶
# 2. 뉴런층 만들기
input_layer = tf.keras.layers.InputLayer(input_shape=(3,))
hidden_layer = tf.keras.layers.Dense(units=4, activation='relu')
output_layer = tf.keras.layers.Dense(units=2, activation='softmax')
아래와 같은 간단한 신경망 모델을 구성하기 위한 뉴런층을 각각 만들었습니다.
길이 3을 갖는 벡터 입력을 받고, 은닉층은 네 개의 뉴런 노드를 가지며, 출력층은 두 개의 뉴런 노드를 가집니다.
은닉층의 활성화함수는 ‘relu’, 출력층의 활성화함수는 ‘softmax’로 지정했습니다.
3) Neural Network 구성하기¶
# 3. 모델 구성하기
model = tf.keras.Sequential([
input_layer,
hidden_layer,
output_layer
])
tf.keras 모듈의 Sequantial 클래스는 Neural Network의 각 층을 순서대로 쌓을 수 있도록 합니다.
앞에서 만든 뉴런층을 순서대로 입력해서 신경망 모델을 구성합니다.
4) Neural Network 컴파일하기¶
# 4. 모델 컴파일하기
model.compile(loss='mse', optimizer='Adam')
손실 함수로 ‘mse’를, 옵티마이저로 ‘Adam’을 지정했습니다.
이 페이지의 예제에서는 훈련을 진행하지 않기 때문에 컴파일 과정은 생략할 수 있습니다.
5) 은닉층의 출력값 확인하기¶
# 5. 은닉층의 출력 확인하기
intermediate_layer_model = tf.keras.Model(inputs=model.input, outputs=model.layers[0].output)
intermediate_output = intermediate_layer_model(x_train)
print('======== Inputs ========')
print(x_train)
print('\n======== Weights of Hidden Layer ========')
print(hidden_layer.get_weights()[0])
print('\n======== Outputs of Hidden Layer ========')
print(intermediate_output)
======== Inputs ========
[[1 0 0]
[0 1 0]
[0 0 1]]
======== Weights of Hidden Layer ========
[[-0.3851872 -0.54333335 0.0655309 0.1134268 ]
[-0.15428883 0.5699866 -0.01254469 0.9223561 ]
[ 0.36428273 -0.6936733 0.38850498 0.30073535]]
======== Outputs of Hidden Layer ========
tf.Tensor(
[[0. 0. 0.0655309 0.1134268 ]
[0. 0.5699866 0. 0.9223561 ]
[0.36428273 0. 0.38850498 0.30073535]], shape=(3, 4), dtype=float32)
tf.keras 모듈의 Model 클래스를 사용해서 새로운 모델 (intermediate_layer_model)을 하나 만들었습니다.
이 모델은 앞에서 구성한 전체 모델의 입력을 입력으로 하고,
첫번째 뉴런층 (hidden_layer)의 출력을 출력으로 하는 신경망 모델입니다.
이 모델에 훈련 데이터 (x_train)을 입력하면 첫번째 뉴런층의 출력을 반환합니다.
첫번째 뉴런층, 즉 은닉층의 출력은 아래와 같이 계산됩니다.
우선 입력 데이터 [1, 0, 0]에 대해 은닉층의 시냅스 가중치가 곱해집니다.
즉, 입력층 첫번째 노드의 입력 1에 시냅스 가중치 [-0.3851872 -0.54333335 0.0655309 0.1134268 ]가 곱해집니다.
다음으로 은닉층의 활성화함수인 ReLU (Rectified Linear Unit)가 적용되어서
0보다 작은 값은 0이되고, 0보다 큰 값은 그대로 출력값이 됩니다.
6) 출력층의 출력값 확인하기¶
출력층의 출력값은 전체 Neural Network 신경망의 출력값입니다.
# 6. 출력층의 출력 확인하기
pred = model.predict(x_train)
print('\n======== Outputs of Output Layer ========')
print(pred)
======== Outputs of Output Layer ========
[[0.45516005 0.5448399 ]
[0.18469977 0.8153002 ]
[0.4541021 0.5458979 ]]
전체 신경망의 출력값은 Model 클래스의 predict() 메서드를 사용해서 간단하게 얻을 수 있습니다.
세 개의 값을 갖는 세 개의 입력 데이터 벡터에 대해 두 개의 값을 갖는 벡터 세 개를 출력합니다.
전체 예제 코드¶
전체 코드는 아래와 같습니다.
import tensorflow as tf
import numpy as np
tf.random.set_seed(0)
# 1. 훈련 데이터 준비하기
x_train = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
y_train = np.array([[0], [1], [1]])
# 2. 뉴런층 만들기
input_layer = tf.keras.layers.InputLayer(input_shape=(3,))
hidden_layer = tf.keras.layers.Dense(units=4, activation='relu')
output_layer = tf.keras.layers.Dense(units=2, activation='softmax')
# 3. 모델 구성하기
model = tf.keras.Sequential([
input_layer,
hidden_layer,
output_layer
])
# 4. 모델 컴파일하기
model.compile(loss='mse', optimizer='Adam')
# 5. 은닉층의 출력 확인하기
intermediate_layer_model = tf.keras.Model(inputs=model.input, outputs=model.layers[0].output)
intermediate_output = intermediate_layer_model(x_train)
print('======== Inputs ========')
print(x_train)
print('\n======== Weights of Hidden Layer ========')
print(hidden_layer.get_weights()[0])
print('\n======== Outputs of Hidden Layer ========')
print(intermediate_output)
# 6. 출력층의 출력 확인하기
pred = model.predict(x_train)
print('\n======== Outputs of Output Layer ========')
print(pred)