저번시간에는 활성화함수가 어떤 것들이 있는지 알아보았다.
이번시간에는 이러한 활성화함수를 실제 keras 코드에서는 어떻게 사용이 되는지 한번 알아볼 예정이다.
tensorflow.keras.activations 에는 어떤 함수들이 내장되어 있으며 어떻게 사용하는지 알아보도록 하자.
tensorflow.keras.activations에 있는 활성화 함수들은 몇몇 개를 제외하면 전부 함수처럼 사용이 가능하다.
그리고 활성화함수의 출력 형태는 모두 tf.Tensor, 즉 텐서로 출력된다.
혹시라도 tensorflow.keras.activations의 함수들을 모델에서 사용하고자 한다면 이 글을 참고 바란다(추후 작성예정)
sigmoid
선형적인 입력을 비선형으로 바꾸어주기 위해서 사용하며 입력에 따라 (0,1)의 출력으로 가지는 활성화 함수
from tensorflow.keras.activations import sigmoid
sigmoid(x)
tanh
쌍곡선함수의 일종. 시그모이드 함수와 비슷하나 시그모이드 함수와 달리 출력을 0을 중심으로 (-1,1)의 출력을 가지는 함수이다.
from tensorflow.keras.activations import tanh
tanh(x)
ReLU
sigmoid나 tanh의 단점들(학습속도 느림)을 해소하기위해 만들어진 함수.
기본적인 ReLU 함수는 위와 같이 정의되지만 케라스에서 제공하는 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이하의 값에 대해 학습을 가능하게 하기 위해 만들어진 함수
위의 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
코드
from tensorflow.keras.activations import elu
elu(x,alpha=1.0)
elu는 파라미터로 x, alpha 만을 가진다. alpha의 기본값은 1.0이다.
파라미터
x: 입력으로 들어올 변수 혹은 텐서
alpha: 위의 정의에서 a 값에 해당하는 부분으로, 음수 부분이 수렴할 부분을 정해준다.
SELU
ELU에 scale 값을 곱한 함수이다.
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
'수업내용정리 > 인공지능' 카테고리의 다른 글
[Tensorflow][Keras]Pooling 의 종류 및 사용법_ CNN이란? (0) | 2023.02.08 |
---|---|
tensorflow.keras.activations 활성화 함수 모델에서 사용하기 (0) | 2023.02.07 |
[인공지능]활성화 함수의 종류 알아보기 (0) | 2023.01.20 |
[Tensorflow][Keras]활성화 함수의 사용법 간단하게 알아보기 (0) | 2023.01.18 |
[Tensorflow][Keras]Conv2D사용법 _CNN이란? (0) | 2023.01.17 |