텐서플로우 코드 5줄로 만드는 세상에서 가장 간단한 신경망
지금부터 텐서플로우 코드 5줄로 세상에서 가장 간단한 신경망(Neural Network)을 만들어보겠습니다.
import tensorflow as tfmy_model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=[1])
])my_model.compile(
loss = 'mse',
optimizer = 'adam'
)my_model.fit([0], [1])my_model.predict([0.5])
위의 코드는 머신러닝의 뼈대라고 할 수 있습니다. 이 6줄의 코드가 어떻게 다른 많은 머신러닝 모델로 변신하는지 알아볼까요?
우선, 코드의 각 줄을 가볍게 살펴보겠습니다.
import tensorflow as tf
이 코드는 파이썬 환경에 텐서플로우를 가져오고, 앞으로 텐서플로우를 부르는 별명을 tf로 설정하겠다는 의미입니다. 매번 tensorflow를 적는 것보다 훨씬 간단하겠죠?
지금은 텐서플로우 2.0이 나왔는데요, 위 코드의 최신 텐서플로우 버전은 아래와 같습니다.
from __future__ import absolute_import, division, print_function, unicode_literalstry:
# %tensorflow_version only exists in Colab.
%tensorflow_version 2.x
except Exception:
passimport tensorflow as tf
**위 코드는 colab에서만 작동하는 버전입니다**
이제 신경망을 만들건데, 텐서플로우 엔진 위에서 작동되는 인터페이스 ‘케라스’를 사용하겠습니다. 케라스는 신경망에 대해 간단하고 직관적인 함수들을 제공하는 모듈입니다. 케라스에는 두가지 모델이 있는데, 1) Sequential 모델과 2) Functional 모델입니다.
Sequential 모델이 좀 더 다루기 편하므로, 우선 Sequential 모델로 시작하겠습니다. 아래의 모델은,
하나의 노드를 갖고 있는 하나의 레이어로 구성되어 있습니다.
이것을 코드로 살펴보면:
my_model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=[1])
])
위와 같습니다. 이 코드가 뜻하는 바를 알아보기 위해 my_model.summary() 코드를 활용해보겠습니다.
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 1) 2 ================================================================= Total params: 2
Trainable params: 2
Non-trainable params: 0 _________________________________________________________________
직접 설명하기 전에 모델 코드 속 숫자를 변화시켜 차이를 알아볼까요?
my_model = tf.keras.Sequential([
tf.keras.layers.Dense(2, input_shape=[1])
])
괄호 안의 1을 2로 바꾸면, my_model.summary() 코드의 결과는:
Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 2) 4 ================================================================= Total params: 4
Trainable params: 4
Non-trainable params: 0 _________________________________________________________________
Output Shape의 숫자와 Parameter의 숫자가 바뀌었네요 :)
그럼 이번엔 모델 코드 속 input_shape의 숫자를 바꿔볼까요?
my_model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=[2])
])
input_shape를 1에서 2로 바꾸니, my_model.summary() 코드의 결과는:
Model: "sequential_2" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_2 (Dense) (None, 1) 3 ================================================================= Total params: 3
Trainable params: 3
Non-trainable params: 0 _________________________________________________________________
모델 코드의 이 숫자를 바꾸면 이게 변하고, 저 숫자를 변하면 저게 변하는데, 여기에는 어떤 수학 마법이 숨어 있는지 알아볼까요?
- output_shape의 차원은 레이어에 있는 노드의 숫자입니다.
- Parameters의 숫자는 아래 공식에 각 숫자를 대입해 얻은 값입니다:
(노드의 수) * (input의 차원) + (노드의 수)
정리하면,
- 첫 번째 모델의 Parameters는 1 * 1 + 1 = 2
- 두 번째 모델의 Parameters는 2 * 1 + 2 = 4
- 세 번째 모델의 Parameters는 1 * 2 + 1 = 3
이번에는 세상에서 가장 간단한 신경망을 만들고, 각 변수가 모델에 어떻게 적용되는지 알아보았습니다.
도움이 많이 되셨나요?
궁금하신 점이나 개선할 점 등 댓글은 언제나 환영하고,
CLAP은 항상 큰 힘이 됩니다.
읽어주셔서 감사합니다.