본문 바로가기
프로그래밍 이야기/Python

[TensorFlow] from tf.keras는 되고 from keras는 안되는 이유

by meticulousdev 2022. 5. 14.
반응형

    TensorFlow를 사용한 딥러닝 모델을 사용하다 보다 보면 from keras import ...와 from tf.keras (혹은 tensorflow.keras) import ... 모두가 등장하곤 합니다. 하지만 어떨 때는 오류 없이 실행되고 어떨 때는 오류가 발생합니다. 이번 글은 이에 관한 이야기입니다.

 

- 컴퓨터: M1 맥북에어

- 아나콘다 버전: conda 4.12.0

- Python 버전: 3.9.7

- TensorFlow 버전: 2.6.0

 

1. 분명 예제에서는 실행되었는데

    다음의 예제를 한번 봐보겠습니다.

 

from keras.utils import to_categorical

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

 

    "케라스 창시자에게 배우는 딥러닝"에 나오는 코드입니다. 분명 책에서는 실행이 되는 코드였는데 실행시키면 다음과 같은 오류가 발생합니다.

 

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
...(중략)...
----> 33 from keras.utils import to_categorical
      34 train_labels = to_categorical(train_labels)
      35 test_labels = to_categorical(test_labels)

ImportError: cannot import name 'to_categorical' from 'keras.utils'
...(하략)...

 

   keras.utils에는 해당 함수가 없다고 합니다. 그래서 코드를 약간 바꿔봤습니다.

 

from tensorflow.keras.utils import to_categorical

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

 

    이렇게 바꿀 경우 문제없이 코드가 동작합니다. 무엇이 문제일까요?

 

2. Keras와 TensorFlow

    다들 Keras와 TensorFlow가 무엇인지는 대략 알고 있을 겁니다. 간략하게만 얘기하면 다음과 같습니다. 자세한 사항은 아래의 링크를 확인해주세요.

 

- Keras (케라스) : 파이썬으로 개발된 딥러닝 API

https://keras.io/ko/

 

Home - Keras Documentation

케라스는 파이썬으로 작성된 고수준 신경망 API로 TensorFlow, CNTK, 혹은 Theano와 함께 사용하실 수 있습니다. 빠른 실험에 특히 중점을 두고 있습니다. 아이디어를 결과물로 최대한 빠르게 구현하는

keras.io

 

- TensorFlow (텐서플로우) : 머신러닝을 위한 오픈소스 플랫폼

https://www.tensorflow.org

 

TensorFlow

모두를 위한 엔드 투 엔드 오픈소스 머신러닝 플랫폼입니다. 도구, 라이브러리, 커뮤니티 리소스로 구성된 TensorFlow의 유연한 생태계를 만나 보세요.

www.tensorflow.org

 

    Keras는 딥러닝 API로 TensorFlow, CNTk, Theano라는 플랫폼들 위에서 구동할 수 있도록 작성되었습니다. 그렇기 때문에 from keras import ...은 keras library에서 함수 등을 가지고 오겠다는 것이며, from tf.keras import ... 는 TensorFlow 위에서 구동되는 keras로부터 함수 등을 가지고 오겠다는 것입니다. 그런데 말입니다. 어느 순간부터 TensorFlow만을 위한 Keras로 바뀌고 있는 거 같습니다.

 

3. TensorFlow 맞춤형 Keras

    구글링을 하다 보니 프랑소와 숄례 (Keras 개발자)의 트윗을 확인할 수 있었습니다. TensorFlow 1.X에서 2.X로 넘어오고 2.3.0 버전이 시작되면서 Keras를 사용하기보다는 TensorFlow를 통해서 사용(tf.keras)하라고 하고 있습니다.

 

We recommend you switch your Keras code to tf.keras.
- François Chollet 트위터

https://twitter.com/fchollet/status/1174018651449544704?s=19 

 

François Chollet on Twitter

“New release of multi-backend Keras: 2.3.0 https://t.co/2JYTf2hjVD - First release of multi-backend Keras with full TF 2 support - Continued support for Theano/CNTK - Will be the last major release of multi-backend Keras We recommend you switch your Kera

twitter.com

 

이는 깃허브에도 동일하게 올라와 있습니다.

 

This is also the last major release of multi-backend Keras. Going forward, we recommend that users consider switching their Keras code to tf.keras in TensorFlow 2.0.

https://github.com/keras-team/keras/releases/tag/2.3.0

 

Release Keras 2.3.0 · keras-team/keras

Keras 2.3.0 is the first release of multi-backend Keras that supports TensorFlow 2.0. It maintains compatibility with TensorFlow 1.14, 1.13, as well as Theano and CNTK. This release brings the API ...

github.com

 

아마도 Keras를 단독으로 불러와서 사용하는 코드의 지원이 점점 줄어드려나 봅니다. 이 외에도 from keras import ... 로 작성되어있는 TensorFlow 책들이나 stackoverflow 등에 있는 코드를 실행시켜보면 오류가 발생하는 경우가 많습니다. 코드를 실행하실 때는 tensorflow.keras 혹은 tf.keras를 사용하는 것이 좋을 거 같습니다.

 

긴 글 읽어주셔서 감사합니다. 
글과 관련된 의견은 언제든지 환영입니다.
반응형

댓글