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
- TensorFlow (텐서플로우) : 머신러닝을 위한 오픈소스 플랫폼
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
이는 깃허브에도 동일하게 올라와 있습니다.
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
아마도 Keras를 단독으로 불러와서 사용하는 코드의 지원이 점점 줄어드려나 봅니다. 이 외에도 from keras import ... 로 작성되어있는 TensorFlow 책들이나 stackoverflow 등에 있는 코드를 실행시켜보면 오류가 발생하는 경우가 많습니다. 코드를 실행하실 때는 tensorflow.keras 혹은 tf.keras를 사용하는 것이 좋을 거 같습니다.
긴 글 읽어주셔서 감사합니다.
글과 관련된 의견은 언제든지 환영입니다.
댓글