안녕하세요! 비버입니다! :D
저는 요즘 유튜브에서 김성훈 교수님의 '모두를 위한 딥러닝 강좌 시즌1' 를 들으며 텐서플로우를 이용한 딥러닝을 복습해보고 있어요. 그런데 시작부터 부닥치는 문제점이 참 많아요. 그중에 하나가 바로 TensorFlow의 Session 모듈!
그렇습니다.. 교수님이 강의를 촬영할 당시 TensorFlow의 버전은 1.0.0. 그러나 현재 내 파이썬에 설치된 TensorFlow는 버전 2.0...
2.0으로 업그레이드된 TensorFlow는 더이상 Session 모듈을 지원하지 않는다!
유튜브 영상의 댓글에는 한 친절한 수강생(?)분께서 다음과 같은 댓글을 달아두셨어요.
저 말대로 코드를 입력하면 Session 모듈을 이용하실 수 있어요.
하지만!
실행 결과창에 끊임없이 경고 메세지가 뜬답니다.
영어로 어쩌구 저쩌구. 복잡해보이지만 어쨌든 위 코드 또한 조만간 지원하지 않게 될 거라는 내용이에요.
그렇다면 결국 TensorFlow 2.0에 맞춰서 새로운 방식의 코드 작성 방식을 익힐 수밖에 없겠죠.
구글링 했습니다. 새로운 업데이트 내용들, Session 모듈 관련된 내용만 걸러 읽었어요.
그랬더니 오- 확실히 2.0 버전 방식이 더 직관적이고 편리해졌더라고요.
김성훈 교수님의 코드 예제를 2.0 방식으로 바꾸어 써보았는데 아래를 참고하시면 바로 이해가 되실 거라고 생각해요.
! ) 3 과 4를 더해서 7이 나오게 만드는 간단한 예제에요.
TensorFlow V1 방식
1
2
3
4
5
6
7
8
9
10
11
12
|
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0, tf.float32)
node3 = tf.add(node1, node2)
sess = tf.Session()
print(sess.run(node3))
|
TensorFlow V2 방식
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# Info 로그를 필터링하려면 1, Warning 로그는 2, Error 로그는 3
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
# 앞쪽 레이어의 노드 빌드하기
node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0, tf.float32)
# 뒷쪽 레이어의 노드(즉 node3)를 함수로 정의하기
@tf.function
def forward() :
return node1 + node2
# 그래프를 실행시키고 output을 확인해보기
out_a = forward()
print(out_a)
|
두 개를 비교해보세요. 차이를 아시겠나요?
V1에서는 node들을 모두 빌드업 해둔 다음 Session 모듈을 이용해 그래프를 실행시켰어요.
하지만 V2에서는 입력값 (input)이 들어가는 node들만 빌드업 해둔 후 그 다음 node (이 예제에서는 node3)은 미리 빌드업 해둔 게 아니라 함수로 정의해서 실행시켰죠.
딥러닝 공부를 위해 파이썬 기초 문법을 공부해보신 분들에게는 Session 이라는 낯선 모듈보다 def가 훨-씬 익숙하실 거예요. 그렇죠? 그래서인지 저는 개인적으로 V2의 코딩 방식이 더 마음에 들었어요.
결과는 둘다 똑같이 7
1
2
3
4
|
#V1의 결과 (앞서 말한 경고 메시지가 함께 뜸)
Instructions for updating:
non-resource variables are not supported in the long term
7.0
|
1
2
|
#V2의 결과
|
둘다 오류 없이 결과값(output)이 잘 나오지만, 앞으로 사용하지 못하게 될 가능성이 있는 V1 방식보단 V2 방식에 익숙해지는 게 좋을 것 같아요.
이상! 비버였습니다! :D
'ML&DL > Tensorflow' 카테고리의 다른 글
[Tensorflow 2.0] 굳이 dtype float32 를 사용하는 이유 (0) | 2022.04.02 |
---|---|
[Keras 설치 에러] Keras requires TensorFlow 2.2 or higher. Install TensorFlow via `pip install tensorflow` (2) | 2020.11.01 |