본문 바로가기
Artificial Intelligence/Keras

[Tensorflow 2][Keras] Week 3 - Custom lambda layers

by 개발자J의일상 2021. 3. 26.
반응형

본 포스팅은 다음 과정을 정리 한 글입니다.

 

Custom Models, Layers, and Loss Functions with TensorFlow

www.coursera.org/specializations/tensorflow-advanced-techniques

 

TensorFlow: Advanced Techniques

deeplearning.ai에서 제공합니다. Expand your skill set and master TensorFlow. Customize your machine learning models through four hands-on courses! 무료로 등록하십시오.

www.coursera.org

지난 시간 리뷰

2021.03.25 - [Artificial Intelligence/Keras] - [Tensorflow 2][Keras] Week 2 - Programming Assignment: Creating a custom loss function

 

[Tensorflow 2][Keras] Week 2 - Programming Assignment: Creating a custom loss function

본 포스팅은 다음 과정을 정리 한 글입니다. Custom Models, Layers, and Loss Functions with TensorFlow www.coursera.org/specializations/tensorflow-advanced-techniques 지난 시간 리뷰 2021.03.21 - [Artif..

mypark.tistory.com

Introduction to Lambda Layers, Custom Functions from Lambda Layers, Exploring custom Relu with Lambda Layers

 

안녕하세요~ 이번 시간에는 custom Lambda Layer를 만드는 법에 대해 알아보고자 합니다.

 

Lamba Layer은 Sequential or a functional API 모델 내에서 임의의 함수를 실행할 수 있게 해 줍니다. 이 것은 빠르고 간단한 작업이나 실험을 할 때 가장 적합합니다.

 

가장 간단한 Lambda Layer는 아래와 같습니다. 매개 변수 내에서 lambda 값을 지정합니다. 이 경우 lambda는 x이고 x값은 절댓값 (x)로 매핑이 됩니다.

 

-1을 넣으면 1이 나오는 것이죠!

 

 

그럼 이 것을 어떻게 사용할 수 있을까요? 우리가 많이 사용했던 fashion MNIST 모델 아키텍처를 예로 들어보겠습니다.

아래 Dense Layer에서 활성화 함수로 relu를 사용하고 있는데요.

relu는 x가 0보다 크면 x를 리턴하고 작거나 같은 경우에 0을 리턴하는 단순한 함수입니다.

음의 출력 값을 효과적으로 제거하는 것이죠.

 

 

다음은 5 epoch동안 네트워크를 훈련시킨 결과입니다. 

꽤 잘 작동하는 것을 알 수 있는데요. training set에서 98.6%, validation set에서 0.9758의 좋은 성능을 보여줍니다.

각 epoch당 4초의 training시간이 걸린 것을 알 수 있습니다.

 

그럼 relu함수를 제거하면 어떻게 될까요?

relu함수를 제거하면 92.2%, 91.5%로 성능이 상당히 떨어진 것을 알 수 있습니다. 

 

그럼 relu를 Lambda layer로 바꿔서 연결해 보겠습니다.

Dense layer에서 activation='relu'를 제거하고 Lambda layer를 연결시켰습니다. 결과는 어떻게 될까요?

 

다시 결과가 98.7%, 97.5%으로 성능이 약간 상승한 것을 알 수 있습니다.  또한 epoch당 걸리는 시간이 가끔 3초도 나오고 있는데 이 것은 lambda layer가 모델의 performance를 올릴 수 있다는 증거가 됩니다. 

이 것은 정말 간단한 예였습니다. 

 

또 다른 예로 코드를 캡슐화하기 위해 lambda layer가 호출할 수 있는 custom function을 만들 수도 있습니다.

아래 예를 보시죠!

똑같이 relu를 구현해 보겠습니다.

여기서는 K.maximum을 사용하여 relu를 구현했는데요. 0보다 크면 x를 넘겨줄 것이고 0보다 작으면 0을 리턴 시켜 줄 것입니다. 

우리는 이 함수를 my_relu라고 선언했고, 이것을 Lambda layer안에 매개변수에 'my_relu' 함수 이름을 넣어줍니다. 

 

 

이것으로 이번 시간은 마치겠습니다. 감사합니다!

300x250

댓글