Tensorflow Adanet Tabular Data 적용해보기

2019. 12. 29. 22:33분석 Python/Tensorflow

728x90

Adanet

 

https://medium.com/neuronio/introduction-to-adanet-c01fad8b084

 

Introduction to AdaNet

AdaNet (Adaptive Structural Learning of Artificial Neural Networks) was announced by Google in its blog as a new AutoML framework. It is…

medium.com

AdaNet은 앙상블 개념을 사용한다. 마지막 모델은 위의 그럼처럼 단순한 것들의 결합으로 이루어진다. 

대단한 점은 이러한 것을 앙상블을 만들기 위해 각 iteration에서 후보 네트워크의 세트를 체크하고 더 작게 만드는 loss를 찾게 되면 앙상블에 더하는 구조를 만들어 준다는 것이다. ㄷㄷ

training data에 overfitting 하는 것을 피하기 위해서 알고리즘은 loss 감소와 모델 일반화 사이에서 밸런스를 유지하게 한다고 한다. (어떻게 하는 거지?!)
이를 위해 각 서브네트워크의 복잡성을 설정하고 일부 AdaNet의 하이퍼 파라미터로 이 네트워크에 페널티를 부과할 수 있다. (ㄷㄷㄷ)

일단 코드는 미디엄에 있는 것을 참고하면 되고, 이것을 저장해서 재사용하는 법을 알아내려고 삽질을 조금 했고 ㅠㅠ
현재는 numerical 데이터에 대해서만 다루고 있는데, 범주형 변수도 같이 있는 경우에도 하고 싶었다.
적용하기 위해서 tensorflow에서 feature_column과 tf.keras.layers.DenseFeatures을 잘사용하면 된다.
개인적으로 임베딩을 적용하려는데, 자꾸 에러가 나서 포기하고 onehot 하는 형태로 구현을 했다. 
(혹시 아시는 분이 댓글에 관련 자료 적어주시면 정말 감사하겠습니다. ㅠㅠ)
그리고 tensorflow2 버전에서도 저장된 모델을 불러다 사용할 수 있는 코드도 짰으니 아래의 github을 참고하시면 된다.

Tensorflow2 연속형 변수 ( Regression )
Tensorflow2 연속형 변수 ( Classifier )
Tensorflow2 연속형 + 범주형 (Classifier)

암튼 오랜만에 estimator 함수를 써서 좋았고, 기존에 1.13에서 사용한 estimator보다는 더 빠르게 추론되는 것 같아 참 좋았다. 그리고 문서를 보면 wide deep도 적용할 수 있는 것 같다.
Neural Network를 앙상블로 하는 방식에 대해서 관심이 좀 있었는데, 벌써 이렇게 패키지화도 하고, 앙상블로 하면 느릴 것 같은데 그렇게 느리지도 않은 것 같아서 다시 한번 대단함을 느낀다...
Tensorflow에서 제공하는 다른 estimator와 합칠 수 있어서 활용가치는 많은 알고리즘인 것은 확실할 것 같다.

 

https://adanet.readthedocs.io/en/v0.8.0/

 

AdaNet documentation — adanet 0.8.0 documentation

© Copyright 2018, AdaNet Authors Revision 9fcd68cc.

adanet.readthedocs.io


참고 :

https://nodoudt.tistory.com/48 | http://solarisailab.com/archives/2603 | https://www.tensorflow.org/tutorials/structured_data/feature_columns

CODE : https://github.com/sungreong/TIL/tree/master/FrameWork%20Tensorflow%20Practice/Adanet

 

sungreong/TIL

Today I Learned. Contribute to sungreong/TIL development by creating an account on GitHub.

github.com

 

728x90