Keras + CNTK Backend

얼마 전에 Keras로 RNN을 구현할 일이 있었습니다.
문제는 아래와 같이 LSTM을 적용하는 부분이었는데요.

model = Sequential()
model.add(LSTM(128, input_shape=(SEQUENCE_LENGTH, len(incoming_list))))
# fully connected layer with softmax activation for classification
model.add(Dense(len(incoming_list)))
model.add(Activation('softmax'))

위 코드에서 while_loop() got an unexpected keyword argument 'maximum_iterations' 에러가 발생하는데, tensorflow backend 코드를 봐도 딱히 문제를 모르겠더군요.

▲ 봐도 모르겠더라. Tensorflow도 구글스럽게 버전별 호환성은 나쁜 듯.

tensorflow backend에서 input_sharp=(...)input_dim, input_length로 나뉘는 것을 **kwargs로 퉁쳐서 입력받는 것이므로, input_dim, input_length으로 나누어 입력했더니 이번엔 IndexOutOfRange 에러가 발생했습니다. 수치적으로만 보면 에러가 날 이유는 없었는데 말이죠.

이와 같은 에러는 구글링 이곳저곳에서 찾을 수 있었는데, 표면적인 원인은 그저 TF/Keras 버전이 안맞는 문제였습니다. 저는 Keras repo의 여러. 이슈.에서 말하는 버전들로 바꿔봐도 문제가 해결되지 않았지만, 해결되었다해도 일부러 Tensorflow/Keras 둘 모두 구버전으로 쓰고 싶지도 않았습니다. 신버전 적용을 두려워하면 영원히 업데이트를 못할 수도 있거든요. (참고로 글쓴 시점 기준 최신은 keras 2.2.4, tensorflow 1.13.1 입니다)

결국 TF backend는 몇 시간동안 버전 이것저것을 맞춰보다 포기하고 CNTK backend를 시도해봤습니다. CNTK backend 적용 방법은 https://docs.microsoft.com/en-us/cognitive-toolkit/Using-CNTK-with-Keras 링크대로 keras.json을 수정하고 환경변수만 하나만 적용하면 잘 됩니다.

결과는 성공적이더군요! 별 일없이 잘 돕니다. 이래야지.

Keras RNN을 적용하다가 저와 같은 에러가 난다면 CNTK backend를 시도해보세요 🙂

▲ 지금 우리가 iteration 한두번 더 해보는게 중요하지 backend가 뭔 상관이겠어요
광고

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중