본문 바로가기

수업내용정리/인공지능

[Tensorflow][Keras]활성화 함수 코드로 알아보기

저번시간에는 활성화함수가 어떤 것들이 있는지 알아보았다.

이번시간에는 이러한 활성화함수를 실제 keras 코드에서는 어떻게 사용이 되는지 한번 알아볼 예정이다.

 

tensorflow.keras.activations 에는 어떤 함수들이 내장되어 있으며 어떻게 사용하는지 알아보도록 하자.

 

tensorflow.keras.activations에 있는 활성화 함수들은 몇몇 개를 제외하면 전부 함수처럼 사용이 가능하다.

그리고 활성화함수의 출력 형태는 모두 tf.Tensor, 즉 텐서로 출력된다.

 

혹시라도 tensorflow.keras.activations의 함수들을 모델에서 사용하고자 한다면 이 글을 참고 바란다(추후 작성예정)

 

sigmoid

선형적인 입력을 비선형으로 바꾸어주기 위해서 사용하며 입력에 따라 (0,1)의 출력으로 가지는 활성화 함수

 

sigmoid의 정의

from tensorflow.keras.activations import sigmoid

sigmoid(x)

tanh

쌍곡선함수의 일종. 시그모이드 함수와 비슷하나 시그모이드 함수와 달리 출력을 0을 중심으로 (-1,1)의 출력을 가지는 함수이다.

 

tanh의 정의

from tensorflow.keras.activations import tanh

tanh(x)

ReLU

sigmoid나 tanh의 단점들(학습속도 느림)을 해소하기위해 만들어진 함수.

ReLU 함수의 정의

기본적인 ReLU 함수는 위와 같이 정의되지만 케라스에서 제공하는 relu 함수는 아래와 같이 동작을 한다.

 

tensorflow.keras.activations.relu 의 정의

tensorflow.keras.activations.relu

기본적인 ReLU, LeakyReLU, ThresholdReLU의 역할을 모두 할 수 있도록 만들어져 있다.

 

코드

from tensorflow.keras.activations import relu

relu(x, alpha=0.0, max_value=None, threshold=0.0)

 

relu는 파라미터로 입력 x, alpha, max_value, threshold를 가진다.

입력만 사용 시 alpha = 0.0, max_value = None, threshold = 0.0으로 설정된다.

 

파라미터

 

x : 입력으로 들어올 변수 혹은 텐서

alpha : threshold 보다 낮은 값에 대하여 취할 기울기

max_value : 함수가 가질 수 있는 최대 값

threshold : 0으로 설정되거나 감쇠되는 기준이 되는 값.

ex) threshold보다 높은 값은 그대로, threshold보다 낮은 값은 alpha를 취해 0이 되거나 감소된 값을 출력.

LeakyReLU

0이하의 값에 대해 학습을 가능하게 하기 위해 만들어진 함수

LeakyReLU의 정의

위의 relu에서 threshold는 0이고 alpha값은 a로 바뀌었다고 생각하면 된다.

 

케라스에서 사용하고자 한다면 위의 tensorflow.keras.activations.relu 를 사용하거나 혹은

함수가 아닌 레이어의 일종인 tensorflow.keras.layers.LeakyReLU를 사용하면 된다.

 

코드 1 tensorflow.keras.activations.relu

from tensorflow.keras.activations import relu

relu(x,alpha = 0.1, max_value=None, threshold = 0.0)
#alpha 는 임의의 값으로 정해주면된다.

 

코드 2 tensorflow.keras.layers.LeakyReLU

from tensorflow.keras.layers import LeakyReLU

layer = LeakyReLU(alpha = 0.1)
output = layer([1.0, -1.0, 1.5, 2.0])
print(output)
#출력 tf.Tensor([ 1.  -0.1  1.5  2. ], shape=(4,), dtype=float32)

ELU

ELU의 정의

코드

from tensorflow.keras.activations import elu

elu(x,alpha=1.0)

elu는 파라미터로 x, alpha 만을 가진다. alpha의 기본값은 1.0이다.

 

파라미터

 

x: 입력으로 들어올 변수 혹은 텐서

alpha: 위의 정의에서 a 값에 해당하는 부분으로, 음수 부분이 수렴할 부분을 정해준다.

SELU

ELU에 scale 값을 곱한 함수이다.

SELU 의 정의

scale값과 a 값은 다음 레이어로 넘어갈 때 평균과 분산이 유지되도록 정해진다.

(단, 입력이 충분히 크고 가중치들이 올바르게 초기화되었을 때

즉, kernel_initializer='lecun_normal'을 사용하여 가중치를 올바르게 초기화해주어야 한다.)

 

코드

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.activations import selu

selu(x)

model = Sequential()
model.add(Dense(10,activation='selu',kernel_initializer='lecun_normal')

 

파라미터

 

x: 입력으로 들어올 변수

softmax

코드

import tensorflow
from tensorflow.keras.activations import softmax

input = tensorflow.constant([1.1,2.3,3.4],shape=(1,3))
output = softmax(input,axis=-1)

print(output)
#출력 tf.Tensor([[0.06995795 0.23226859 0.69777346]], shape=(1, 3), dtype=float32)

softmax는 파라미터로 입력 x만을 가진다. (x는 텐서)

 

파라미터

 

x: 입력으로 들어올 텐서

 

softplus

코드

from tensorflow.keras.activations import softplus

softplus(x)

 

파라미터

 

x:입력으로 들어올 변수 혹은 텐서

softsign

코드

from tensorflow.keras.activations import softsign

softsign(x)

 

파라미터

 

x: 입력으로 들어올 변수 혹은 텐서

 

 

이렇게 활성화함수를 실제 코드로는 어떻게 사용되는지 알아보았다.

혹시 궁금한 것이 있거나 더 알고 싶은 점이 있다면 아래 참조를 참조하거나 댓글로 자유롭게 알려주세요!

참조

https://keras.io/api/layers/activations/

 

Keras documentation: Layer activation functions

Layer activation functions Usage of activations Activations can either be used through an Activation layer, or through the activation argument supported by all forward layers: model.add(layers.Dense(64, activation=activations.relu)) This is equivalent to:

keras.io