[인공지능] TensorFlow 2.x과 1.x의 차이점
- 인공지능
- 2023. 3. 4. 00:49
참조
목적
- TensorFlow 1.x 에서 2.x 로 업데이트 되면서 무엇이 바뀌었는지 확인합니다.
1. Session 사용의 불필요
- TensorFlow 1과 TensorFlow 2의 가장 큰 차이는 Session 사용의 유무 입니다.
- TensorFlow 1 같은 경우에는 원하는 값을 출력하기 위해서 Session을 열고 찾으려는 값을 그 Session을 통해서 값을 받아오는 복잡한 구조였습니다.
- 하지만, TensorFlow 2 부터는 별도의 Session 실행 없이 바로 특정 값을 계산할 수 있게 되었습니다.
Session은 Graph를 돌리는 단위로 file과 같다고 생각하면 쉽습니다. 파일에 그래프를 넣고 저장하고 실행시킬 수 있습니다. 보다 자세한 내용은 http://mcheleplant.blogspot.com/2019/03/tensorflow.html 참고하면 됩니다.
1.1. TensorFlow 1 버전
a = tf.constant(1)
b = tf.constant(2)
c = a * b
sess = tf.Session()
sess.run(c)
1.2. TensorFlow 2 버전
a = tf.constant(1)
b = tf.constant(2)
c = a * b
print(c)
2. 선언 최소화 및 내장 함수 사용
- TensorFlow 1 의 경우 많은 부분이 전역적인 형태로 처리되고 있었습니다.
- 예를 들어 우리가 선언한 전역 변수나 placeholder를 사용하기 위해서는, global_variables_initializer API를 호출해야 설정한 값들을 사용할 수 있었습니다.
- 하지만, placeholder와 더불어 전역 형태로 호출하는 부분들을 생략할 수 있게 되었습니다.
- 그래서 전체적으로 코드가 간결해지고 디버깅도 쉽게 할 수 있게 되었습니다.
- 또한 TensorFlow 1에서도 Keras를 사용할 수 있었지만, TensorFlow 2 부터는 공식 소스로 편입 되면서 쉬운 Keras 코딩을 더 활발하게 이용할 수 있다는 장점이 있습니다.
2.1. TensorFlow 1 버전
import tensorflow.compat.v1 as tf
in_a = tf.placeholder(dtype=tf.float32, shape=(2))
def model(x) :
with tf.variable_scope("matmul") :
W = tf.get_variable("W", initializer=tf.ones(shape=(2, 2)))
b = tf.get_variable("b", initializer=tf.zeros(shape=(2)))
return x * W + b
out_a = model(in_a)
with tf.Session() as sess :
sess.run(tf.global_variables_initializer())
outs = sess.run([out_a], feed_dict={in_a: [1,0] })
2.2. TensorFlow 2 버전
import tensorflow as tf
W = tf.Variable(tf.ones(shape=(2,2)), name="W")
b = tf.Variable(tf.zeros(shape=(2)), name="b")
@tf.function
def model(x) :
return W * x + b
out_a = model([1,0])
print(out_a)
3. 속도의 차이
- Session을 통해 호출하는 것이 동일 코드라고 하면 더 빠릅니다.
- 이유는 TensorFlow 1 에서 Session을 실행하기 전에 모든 변수 하나씩 다 선언하고 변수를 받는 곳에는 미리 placeholder라는 틀을 만들고 모든 것을 설정한 후에 진행하였기 때문입니다.
- 쉽게 달리기로 예로 들어 봅니다. TensorFlow 1 같은 경우에는 달리기 시합 전에 가벼운 소재 유니폼을 입고, 러닝화를 신고, 준비 운동까지 끝 맞춘 상황에서 달리기를 하는 것입니다.
- 그래서 달리기를 할 때, 최적의 속도로 달릴 수 있습니다.
- 그러나 TensorFlow 2는 달리기 시합 전에 최소한의 장비만 착용하고 달리는 것입니다.
- 때문에 속도는 TensorFlow 2 보다 TensroFlow 1이 더 빠릅니다.
4. Function 사용
- TensorFlow 2의 속도가 느려진 것을 보완하기 위해 나온 것이, function 화 입니다.
@tf.function
def add(a, b):
return a + b
- 위와 같이 우리가 만든 임의의 function에 tf.function을 달아주면, 컴파일 되어 해당 함수는 미리 세이브드 모델에 저장됩니다.
- 그래서 필요에 따라서 우리가 만든 코드에 저장된 함수를 빠르게 부를 수 있고, 불러진 함수는 보다 빠르게 처리해줌으로써 속도를 높여주고 있습니다.
728x90
'인공지능' 카테고리의 다른 글
[인공지능] TensorFlow train_test_split (0) | 2023.03.05 |
---|---|
[인공지능] Keras 모델 (0) | 2023.03.03 |
[인공지능] Keras 모델 생성 기본 구조 (0) | 2023.03.03 |
[인공지능] TensorFlow 데이터 분리 (0) | 2023.02.26 |
[인공지능] MNIST 모델별 Image Resize 하기 (0) | 2023.02.26 |
이 글을 공유하기