[Day 35] TensorFlow Advanced techniques

 안녕하세요?
오늘은 Day 35입니다!


아래 것을 시작했다


재미있는 내용이 다음과 같다


1) Functional API로 모델 구성


Sequential API 
Functional API
Functional API 사용할 때, input 레이어 직접 정의해야 하며 각 레이어를 다음 레이어 끝에 붙여야 한다. 그리고 Model의 input와 output도 정의해야 한다. 왜냐면 functional api로 구성되는 모델은 여러 가지 input와 output이 존재할 수 있다 

Functional API로 다음과 같은 복잡한 모델 구성할 수 있다

그 모델 보다, 좀 더 단순한 모델로 설명할 것이다
또, 각 output의 성능과 손실 함수 따로 정의 할 수 있다

2) Siamese network model

Siamese network는 다음과 같은 2가지 input와 1가지 output이 있는 모델이다


예를 들어자면, 옷을 비교할 수 있는 모델을 만들 수 있다
티셔츠가 비슷하여 1.0로 분류했다 (반대로 0으로 분류했을 것이다)
이미지가 비슷하든 말든 분류하기 위해 euclidean distance 사용할 수 있고 결과 sample이 다음과 같다 
이미지가 비슷한 경우 소수를 주는데 반대의 경우 대수를 준다 

3) Custom Loss 함수

a의 absolute 값이 우리가 정의한 threshold보다 작은 경우 1/2 * a**2, 반대로 threshold * (abs(a) - 1/2 * threshold)
단순한 version은 다음과 같이 하고 사용할 수 있다

그래도 threshold의 값 조직하려면 더 좋은 방법이 있다 (Class으로)


4) Custom 레이어

Class으로 하고 build 함수에서 w와 b 정의하고, call 함수에선 w*a + b 계산한다
activation 함수도 포함하려면 다음과 같이 코드를 바꿔야 한다
init 함수에서 activation 정의한다
enclose the return of the call function

5) Custom models


다음과 같이 복잡한 모델은 functional API로 할 수 있다

그런데 ~ 그보다 더 복잡한 모델도 할 수 있다

이것은 ResNet 사례이다

ResNet에 대해 Day 28에 처음 배웠는데 어떻게 하는지 이해를 못했다. 그런데 오늘은 functional api가 어떻게 사용할 수 있는지 알아서 알게 되었다.
각 청색이나 어린제 block이 functional api로 구성된 것이다 (아래 사진와 같다)
IdentityBlock 만든 뒤에 소형 ResNet 모델을 만들 수 있다

굉장히 재미있는 부분이다! 


오늘은 여기까지입니다!
내일 뵐게요!

Popular posts from this blog

[Day 198] Transactions Data Streaming Pipeline Porject [v1 completed]

[Day 107] Transforming natural language to charts

[Day 54] I became a backprop ninja! (woohoo)