텐서플로우(Tensorflow) 2.x과 1.x의 차이

    텐서플로우가 2.0 버전으로 들어서게 되면서, 많은 변화들이 생겨났다. 최근 프로젝트를 강제로 2.0으로 변환하고 있는데 아직 해당 버전에 대한 이해도가 낮기 때문에 많이 힘들어서 자구책으로 케라스(Keras)로 변환하여 사용하고 있다. 


    텐서플로우 2.0대부터는 케라스가 텐서플로우 프로젝트에 편입되었기 때문에 케라스로 구현하든 텐서플로우 2.0으로 코딩하든 사실 크게 상관이 없겠지만, 케라스의 쉬운 코딩은 소스의 길이를 대폭 감소하고 텐서플로우 2.0을 써도 크게 문제가 되지 않는 모델을 만들어준다.


    우선 그러면 1.0과 2.0이 얼마나 차이가 나는지 한번 보도록 해보자. 아래 소스는 Packt 출판사에서 발매한 "Deep Learning with TensorFlow 2 and Keras"라는 도서에서 나온 소스로 1점대와 2점대가 얼마나 차이가 나는지 알 수 있다.


    필자가 요즘 보고 있는 Tensorflow 2.0과 Keras를 다룬 도서, 정가 약 48000원



    텐서플로우 1.0 소스와 2.0 소스의 비교


    텐서플로우 1.0 소스

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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=(22)))
            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] })
    cs


    텐서플로우 2.0 소스

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import tensorflow as tf
     
    = tf.Variable(tf.ones(shape=(2,2)), name="W")
    = 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)
    cs


    1.0과 2.0의 소스를 보는 것과 같이 소스의 크기가 엄청 단축되었고, 쉬워졌다. 그동안 텐서플로우는 다른 딥러닝 라이브러리에 비해서 어렵다보니 개발이 전공이 아닌 박사나 연구원분들이 꽤나 PyTorch로 넘어가곤 했는데 2.0은 상당히 쉬워져서 책에서는 이런 말까지 하였다. "If you have started with TensorFlow 2.0 and have never seen TensorFlow 1.x, then you are lucky."


    게다가 케라스를 텐서플로우 공식 소스로 편입하여서 텐서플로우 2.0보다 더 쉬운 케라스로 코딩을 하면 되기에 선택권은 더욱 많아졌다고 보면 될 것이다.

    댓글

    Designed by JB FACTORY