본문 바로가기
DeepLearning Framework & Coding/Tensorflow 2.X

[코드로 이해하는 딥러닝 2-4] - Logistic Regression(sigmoid)

by 노마드공학자 2021. 1. 8.

※ Tensorflow1문법을 2로만 바꾸는것이기에, 코드분석 위주로 진행하고있습니다.

[Tensorflow1 링크종합] https://limitsinx.tistory.com/50

 

 

※ 이 전글에서 정리한 코드/문법은 재설명하지 않으므로, 참고부탁드립니다.

코드만 해석하고 넘어가기에 다소 불친절한 글 일수 있습니다..

   개념적인 부분은 하기 링크에 따로 정리해두어, 참조 부탁드립니다.

https://limitsinx.tistory.com/35

 

[코드로 이해하는 딥러닝 8] - Logistic Regression(sigmoid)

[코드로 이해하는 딥러닝 0] - 글연재에 앞서 https://limitsinx.tistory.com/27 [코드로 이해하는 딥러닝 1] - Tensorflow 시작 https://limitsinx.tistory.com/28 [코드로 이해하는 딥러닝 2] - Tensorflow 변..

limitsinx.tistory.com

 

 

Binary Classification을 하기 위한 Logistic Regression(sigmoid)에 관해 정리해보겠습니다.

 

Sigmoid는 0과 1을 구분하기 위해 주로 사용하는 활성함수(activaton function)인데요

 

활성함수란, 학습시 Weighting과 bias값들이 일정한 규칙아래서 잘 동작하도록 해주는 역할을 합니다.

(예를들면, 발산하는것을 막아준다거나, mim/max제한을 둔다거나..)

 

이중

 

"이런 이런 이런 특징이 있을때 이 환자는 암이니?" 라는 문제에서 Yes or No로 만 대답을 할 수있는 Sigmoid에 대해 정리해보겠습니다.

 

sigmoid에대한 좀더 자세한 개념적인 내용은 상기 링크 참조 부탁드립니다.

 

 

[코드 전문]

 

import tensorflow as tf

 

x_data = [[12],

          [23],

          [31],

          [43],

          [53],

          [62]]

y_data = [[0],

          [0],

          [0],

          [1],

          [1],

          [1]]

 

tf.model = tf.keras.Sequential()

tf.model.add(tf.keras.layers.Dense(units=1input_dim=2))

# use sigmoid activation for 0~1 problem

tf.model.add(tf.keras.layers.Activation('sigmoid'))

 

''' 

better result with loss function == 'binary_crossentropy', try 'mse' for yourself

adding accuracy metric to get accuracy report during training

'''

tf.model.compile(loss='binary_crossentropy'optimizer=tf.keras.optimizers.SGD(lr=0.01), metrics=['accuracy'])

tf.model.summary()

 

history = tf.model.fit(x_data, y_data, epochs=5000)

 

# Accuracy report

print("Accuracy: ", history.history['accuracy'][-1])

 

 

[코드 분석]

tf.model.add(tf.keras.layers.Activation('sigmoid'))라는 한줄을 추가함으로써, sigmoid activation function을 구현한 모습입니다.

 

tf.model.compile(loss='binary_crossentropy',optimizer=tf.keras.iptimizers.SGD(lr=0.01),metrics=['accuracy'])

: 이부분은 새로 추가되긴 했습니다. 

이제까지 activation을 Linear로 사용할때는 loss를 mse(mean square error)로 사용했지만, sigmoid function을 통과시키게 되면 cross entropy라는 새로운 cost function 형태가 더욱 효과적으로 동작합니다!

(mse로 써도 동작이 안되는건 아닙니다. 성능이 cross entropy가 좀더 좋을뿐)

 

마지막에 metrics=[accuracy]라는 구문을 추가해두어 밑에 history에서 정확도를 확인할 수 있도록 코드 구현되었습니다.

 

 

[결과값]

 

1000번정도 학습시키니 83%정도의 정확도가 나오네요, 5000번 정도 해보니 100에 가까운 정확도가 나오는것을 확인할 수 있었습니다.

 

어떤 Activation function을 어떤 경우에 써야하나요?? 라는 질문을 많이받는데요

 

 

"Sigmoid는 Binary classification"

 

 

이라고 말씀드리겠습니다!

 

실제로 자율주행도 binary classification입니다.

 

이것이 내가 따라가야할 차선이냐?? 아니냐?? Yes or No로 계산하는문제죠(흑/백)

 

즉, 어떻게 활용하느냐에따라 Binary Classification으로도 간편하게 많은 문제를 해결할 수 있습니다.

댓글