본문 바로가기
DeepLearning Framework & Coding/De-bugging

module 'tensorflow_core.compat.v1' has no attribute 'contrib'

by 노마드공학자 2020. 12. 27.

해당 오류는 Tensorflow 2.0 이상의 버전을 사용하시는 분들이

 

1.X버전의 코드를 사용하기 위해

 

import tensorflow.compat.v1 as tf

tf.disable_v2_behavior()

 

코드를 기반으로 작성하실때 나타나는 문제점입니다.

 

 

Attribute Error: module 'tensorflow_core.compat.v1' has no attribute 'contrib'

 

 

'contrib'는 구글 텐서플로우 개발자 입장에서도 처리하기가 아주 까다로운 문제였는데요

 

Tensorflow 1.x에서 Xavier부터 각종 스킬들은 모두 해당 라이브러리에 담아놨기때문에.. 2.X으로 업그레이드할때 고민이 많았다는 글을 본적이 있습니다.

 

2.X 코드들이 직관적이긴 하지만, 1.X도 나름 정리가 잘되어있어서 코드를 이렇게까지 많이바꿔야하나...싶긴하지만

 

즉, Tensorflow 2.0이상의 버전에선 'contrib'가 없습니다!

 

사용하시려면 1.X버전을 다운받으셔야 합니다. 하지만, 2.0을 쓰면서도 Contrib를 쓰고싶으실텐데요..

 

하나하나씩 대체할 코드를 찾고있습니다만, 일단 제가 직면한 문제였던 Xavier을 대체한 코드부터 공유드리겠습니다 :)

 

(기존) initializer = tf.contrib.layers.xavier_initializer()

# -outputs, states = tf.contrib.rnn.static_rnn(lstm_cells, _X, dtype=tf.float32)

 

(변경) initializer = tf.truncated_normal_initializer(stddev=0.1)

outputs, states = tf.compat.v1.nn.static_rnn(lstm_cells, _X, dtype=tf.float32)

 

해당코드로 변경하게 되면 초기화하는 방법중 하나인 Xavier과 흡사한 성능의 초기화를 할 수 있습니다.

 

MNIST 파일로 실험해본 결과 정확도가 비슷하게 나오네요

 

+ RNN코드도 추가했습니다

댓글