ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 텐서 플로우 2.0 강좌 1 - 텐서플로우 설치
    Machine Learning & Deep Learning/Tensorflow 강좌 2019.07.14 17:04

     

     

    텐서플로우 2.0 베타를 설치해보고 간단한 예제를 실행시켜 봅니다. 



    최초 작성 2019. 7. 14




    다음 명령으로 Tensorflow 2.0 Beta  패키지를 설치합니다.

    글 작성시점에서는 아직 정식 버전이 아닙니다.

     

    pip install tensorflow==2.0.0-beta1



    글 작성 시점과 최신 버전이 다를 수 있습니다. 

    최신 버전은 아래 링크에서 확인하세요.

    https://www.tensorflow.org/beta/




    다음처럼 명령 프롬프트 창에서 설치한 Tensorflow 버전을 확인합니다.

     

    C:\Users\webnautes>python

    Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32

    Type "help", "copyright", "credits" or "license" for more information.

    >>> import tensorflow as tf

    >>> tf.__version__

    '2.0.0-beta1'




    간단한 케라스(keras) 예제를 실행시켜 봅니다.

     

    import tensorflow as tf



    # MNIST 데이터 세트를 가져옵니다. 

    mnist = tf.keras.datasets.mnist

     

    (x_train, y_train), (x_test, y_test) = mnist.load_data()

    x_train, x_test = x_train / 255.0, x_test / 255.0



    # 뉴럴 네트워크 모델을 생성합니다. 

    model = tf.keras.models.Sequential([

      tf.keras.layers.Flatten(input_shape=(28, 28)),

      tf.keras.layers.Dense(128, activation='relu'),

      tf.keras.layers.Dropout(0.2),

      tf.keras.layers.Dense(10, activation='softmax')

    ])



    # 학습을 위한 optimizer와 loss function을 선택합니다. 

    model.compile(optimizer='adam',

                  loss='sparse_categorical_crossentropy',

                  metrics=['accuracy'])



    # 학습 데이터 세트를 사용하여 모델을 학습시킵니다. 5번 반복합니다. 

    model.fit(x_train, y_train, epochs=5)

     

    # 테스트 데이터 세트를 사용하여 모델을 평가합니다. 

    model.evaluate(x_test, y_test)

     

    import tensorflow as tf
    
    
    
    
    # MNIST 데이터 세트를 가져옵니다. 
    
    mnist = tf.keras.datasets.mnist
    
    
    
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    
    x_train, x_test = x_train / 255.0, x_test / 255.0
    
    
    
    
    # 뉴럴 네트워크 모델을 생성합니다. 
    
    model = tf.keras.models.Sequential([
    
      tf.keras.layers.Flatten(input_shape=(28, 28)),
    
      tf.keras.layers.Dense(128, activation='relu'),
    
      tf.keras.layers.Dropout(0.2),
    
      tf.keras.layers.Dense(10, activation='softmax')
    
    ])
    
    
    
    
    # 학습을 위한 optimizer와 loss function을 선택합니다. 
    
    model.compile(optimizer='adam',
    
                  loss='sparse_categorical_crossentropy',
    
                  metrics=['accuracy'])
    
    
    
    
    # 학습 데이터 세트를 사용하여 모델을 학습시킵니다. 5번 반복합니다. 
    
    model.fit(x_train, y_train, epochs=5)
    
    
    
    # 테스트 데이터 세트를 사용하여 모델을 평가합니다. 
    
    model.evaluate(x_test, y_test)



     

    다음과 같은 결과가 출력됩니다.

     

     

    # 다운로드된 MNIST 데이터는 다음 경로에 저장됩니다. 

    # C:\Users\사용자이름\.keras\datasets

     

    Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz

     

        8192/11490434 [..............................] - ETA: 1s

       49152/11490434 [..............................] - ETA: 11s

      114688/11490434 [..............................] - ETA: 10s

      286720/11490434 [..............................] - ETA: 5s 

     

    1395072/11490434 [============================>.] - ETA: 0s

    11419648/11490434 [============================>.] - ETA: 0s

    11452416/11490434 [============================>.] - ETA: 0s

    11493376/11490434 [==============================] - 18s 2us/step



    # pip로 설치한 Tensorflow 패키지는 사용중인 CPU에 최적화 되어 있지 않기에 

    # 다음과 같은 메시지가 보입니다.

    2019-07-14 16:38:57.771420: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2

     

    # 도태 예정(deprecated)인 API가 있다는 메시지입니다. 

    WARNING: Logging before flag parsing goes to stderr.

    W0714 16:38:57.949635  4612 deprecation.py:323] From C:\Users\webnautes\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\ops\math_grad.py:1250: add_dispatch_support.<locals>.wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.

    Instructions for updating:

    Use tf.where in 2.0, which has the same broadcast rule as np.where



    # 60,000개의 학습데이터 세트 샘플에 대해 5번 학습이 반복됩니다. 

    # 손실과 정확도를 출력합니다. 

    Train on 60000 samples

    Epoch 1/5

     

       32/60000 [..............................] - ETA: 3:38 - loss: 2.4668 - accuracy: 0.0625

      768/60000 [..............................] - ETA: 12s - loss: 1.7727 - accuracy: 0.4609 

     1376/60000 [..............................] - ETA: 9s - loss: 1.4391 - accuracy: 0.5719 

        . . . . . .  생략 . . . . . . 

    59168/60000 [============================>.] - ETA: 0s - loss: 0.2967 - accuracy: 0.9137

    59488/60000 [============================>.] - ETA: 0s - loss: 0.2962 - accuracy: 0.9138

    59776/60000 [============================>.] - ETA: 0s - loss: 0.2955 - accuracy: 0.9141

    60000/60000 [==============================] - 7s 117us/sample - loss: 0.2951 - accuracy: 0.9142

     

    Epoch 2/5

     

       32/60000 [..............................] - ETA: 21s - loss: 0.3017 - accuracy: 0.9375

      416/60000 [..............................] - ETA: 9s - loss: 0.1537 - accuracy: 0.9495 

      832/60000 [..............................] - ETA: 8s - loss: 0.1245 - accuracy: 0.9627

        . . . . . .  생략 . . . . . . 

     59616/60000 [============================>.] - ETA: 0s - loss: 0.1412 - accuracy: 0.9579

    59936/60000 [============================>.] - ETA: 0s - loss: 0.1411 - accuracy: 0.9580

    60000/60000 [==============================] - 9s 143us/sample - loss: 0.1411 - accuracy: 0.9580

     

        . . . . . .  생략 . . . . . . 

     

    Epoch 5/5

     

       32/60000 [..............................] - ETA: 22s - loss: 0.1479 - accuracy: 0.9375

      384/60000 [..............................] - ETA: 10s - loss: 0.1167 - accuracy: 0.9688

      800/60000 [..............................] - ETA: 8s - loss: 0.0890 - accuracy: 0.9775 

        . . . . . .  생략 . . . . . .  

    59136/60000 [============================>.] - ETA: 0s - loss: 0.0747 - accuracy: 0.9764

    59488/60000 [============================>.] - ETA: 0s - loss: 0.0746 - accuracy: 0.9764

    59872/60000 [============================>.] - ETA: 0s - loss: 0.0744 - accuracy: 0.9765

    60000/60000 [==============================] - 9s 144us/sample - loss: 0.0744 - accuracy: 0.9765



    # 10,000개의 테스트 세트 샘플에 대해 손실과 정확도를 계산합니다. 

     

       32/10000 [..............................] - ETA: 28s - loss: 0.0210 - accuracy: 1.0000

      736/10000 [=>............................] - ETA: 1s - loss: 0.0598 - accuracy: 0.9851 

     1504/10000 [===>..........................] - ETA: 1s - loss: 0.0854 - accuracy: 0.9767

     2048/10000 [=====>........................] - ETA: 0s - loss: 0.0929 - accuracy: 0.9736

     2752/10000 [=======>......................] - ETA: 0s - loss: 0.0957 - accuracy: 0.9738

     3392/10000 [=========>....................] - ETA: 0s - loss: 0.0900 - accuracy: 0.9752

     4064/10000 [===========>..................] - ETA: 0s - loss: 0.0941 - accuracy: 0.9732

     4576/10000 [============>.................] - ETA: 0s - loss: 0.0943 - accuracy: 0.9720

     5120/10000 [==============>...............] - ETA: 0s - loss: 0.0905 - accuracy: 0.9729

     5888/10000 [================>.............] - ETA: 0s - loss: 0.0832 - accuracy: 0.9750

     6624/10000 [==================>...........] - ETA: 0s - loss: 0.0820 - accuracy: 0.9755

     7424/10000 [=====================>........] - ETA: 0s - loss: 0.0758 - accuracy: 0.9771

     8224/10000 [=======================>......] - ETA: 0s - loss: 0.0704 - accuracy: 0.9787

     9024/10000 [==========================>...] - ETA: 0s - loss: 0.0669 - accuracy: 0.9798

     9888/10000 [============================>.] - ETA: 0s - loss: 0.0671 - accuracy: 0.9797

    10000/10000 [==============================] - 1s 91us/sample - loss: 0.0670 - accuracy: 0.9797





    참고

     

    Get started with TensorFlow 2.0 for beginners

    https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/r2/tutorials/quickstart/beginner.ipynb










    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 후원 또는 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구 독 하 기
    후 원 하 기


    댓글 4

    • 김종석 2019.10.04 13:51


      1.0으로 작성된 코드 실행 하면 에러 나는데..
      tf_upgrade_v2로 컨버팅해도 에러 납니다.
      tensorflow 2.0 변경 시 특별히 고려 사항이 있으면 부탁합니다.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.04 14:17 신고


        2.x에서 Eager execution이 디폴트이지만 아직은 1.x 코드도 사용가능한 듯합니다.

        1.x에서 사용하던 함수 이름이 바뀐게 있어서 에러나는 메시지를 구글에서 검색해보면서 해결하는게 좋을 듯합니다.

        또는 아래 링크도 확인해보세요

        https://www.tensorflow.org/guide/migrate

      • 2019.11.15 23:24




        지금 이거저거 해보는 중인데
        일단 그대로 큰 변경없이 실행하려면

        1. 바로 실행을 disable시키기
        tf.compat.v1.disable_eager_execution()

        2. 어지간한건 compat.v1 추가.
        ex) tf.placeholder -> tf.compat.v1.placeholder

        3. contrib slim 등은 폐기됨.
        그래서 대안으로 쓸 게 있는지 검색해보고 없으면 직접 구현해야함.
        예를들어
        tf.contrib.rnn.BasicLSTMCell -> tf.compat.v1.nn.rnn_cell.BasicLSTMCell
        은 가능한데
        tf.contrib.layers.fully_connected -> ???
        ... 이건 그냥 없음. 그래서 그냥 직접 변수설정하고 처리해버림. ㅠㅠ


        완전히 그냥 케라스 전용임.
        문제는 같은 기능의 코드인데 더 느리고 성능 열악해짐. ㅠㅠ
        속도가 크게 느린데다 학습률 같은데도 정확도가 덜 올라감. 이상함. ㅠㅠ

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.16 18:08 신고


        댓글 감사합니다. 1.x는 이제 지원이 안될듯합니다.

Designed by Tistory.