• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Python, SQL 게시판 증강/전이 CNN predict 예제 부탁합니다

증강/전이 CNN predict 예제 부탁합니다

  • 이 주제에는 1개 답변, 2명 참여가 있으며 codingapple4 년 전에 전에 마지막으로 업데이트했습니다.
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #10183

    최헌수
    참가자

    안녕하세요,Augment_CNN_predict1

    (1) MNIST (상품)이미지에 대한 CNN모델의 predict 는 동영상 자료에 따라 확인했습니다.

       ImageNet(개/고양이)에 대한 증강 CNN과 전이 CNN에 대한 predict 코드는 동영상에 없어서

      아래처럼 자체적으로  작성해 봤는데 아무래도 이상합니다. (코드 및 출력 은 아래, 그림은 위)

     표준 predict 예제코드를 부탁합니다. 

    (2) 백견이 불여일타라 일일이 타이핑은 해봅니다만, 강의동영상 자료외에 소스코드는

        깃허브 등에 안올려 놓나요 ?

    (3) train_ds., val_ds, test_ds는 ImageNet 개와 고양이가 각각 그림 번호순으로 64 x 313, 64 x 79, 64 x 196개씩 저장됩니까 ?   predict는 할때마다 순서가 바뀌는듯... (predict1, 2 그림 다름)

    # 아래는 동영상에 나오는 증강 CNN 모델코드와, 직접 작성한 predict 코드입니다.

    . . . 앞부분 생략

    model = tf.keras.Sequential([

       . . . ])

    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    model.fit(train_ds, validation_data=val_ds, epochs= 5 )
    # 이다음부터 동영상에 없어서 직접 작성해봄...

    # 학습후 테스트용 그림에 대해 원래 분류코드(0/1)와 예측값을 동시에 출력해 보는 건데...

    # 그림은 3 x 3으로 나오고 숫자도 그림당 2개(원분류, 예측분류)씩 출력되는데 뭔가

       매칭이 안되는듯 합니다.... (예상은 test_ds 의 9개 그림이 분류값/예측값 함께 출력이 되길 기대하였는데... 실행오류는 없으나 원분류코드와 예측분류코드와 그림의 매칭이 이상합니다. predict 출력부분 한번 봐 주세요 ~~~

     

    predition = model.predict(test_ds.take(1))  # test_ds의 1 batch(64개) 그림

    for images, labels in test_ds.take(1):  # 1배치 = 64 이미지 판단결과
        for i in range(9):
            ax = plt.subplot(3, 3, i + 1)
            plt.imshow(images[i].numpy().astype("uint8"))   # 그림과 원분류코드는 test_ds
            plt.title('%s, %s' % (int(labels[i]), predition[i]))    # 예측분류코드는 prediction
            plt.axis("off")
            plt.show()
        break
    # 아래는 수행결과 메시지

    Found 25000 files belonging to 2 classes.
    Using 5000 files for validation.
    Found 12500 files belonging to 1 classes.

    train_ds =
    <BatchDataset shapes: ((None, 64, 64, 3), (None,)), types: (tf.float32, tf.int32)>

    val_ds =
    <BatchDataset shapes: ((None, 64, 64, 3), (None,)), types: (tf.float32, tf.int32)>

    test_ds =
    <BatchDataset shapes: ((None, 64, 64, 3), (None,)), types: (tf.float32, tf.int32)>

    Batch Length : train_ds(313), val_ds(79), test_ds(196)

    2021-06-08 01:07:34.139340: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:176] None of the MLIR Optimization Passes are enabled (registered 2)
    Epoch 1/5
    313/313 [==============================] - 60s 187ms/step - loss: 0.6456 - accuracy: 0.6144 - val_loss: 0.6471 - val_accuracy: 0.6470
    Epoch 2/5
    313/313 [==============================] - 74s 236ms/step - loss: 0.5592 - accuracy: 0.7127 - val_loss: 0.7121 - val_accuracy: 0.6538
    Epoch 3/5
    313/313 [==============================] - 101s 323ms/step - loss: 0.5184 - accuracy: 0.7416 - val_loss: 0.5057 - val_accuracy: 0.7520
    Epoch 4/5
    313/313 [==============================] - 107s 342ms/step - loss: 0.4820 - accuracy: 0.7682 - val_loss: 0.4761 - val_accuracy: 0.7734
    Epoch 5/5
    313/313 [==============================] - 100s 320ms/step - loss: 0.4546 - accuracy: 0.7854 - val_loss: 0.4009 - val_accuracy: 0.8172

    prediction probability is :
    [[1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [0.0000000e+00]
    [0.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [0.0000000e+00]
    [1.0000000e+00]
    [2.5699649e-25]
    [0.0000000e+00]
    [8.5365959e-17]
    [1.0000000e+00]
    [8.7515281e-21]
    [1.0000000e+00]
    [1.0000000e+00]
    [0.0000000e+00]
    [0.0000000e+00]
    [1.0000000e+00]
    [0.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [0.0000000e+00]
    [0.0000000e+00]
    [0.0000000e+00]
    [0.0000000e+00]
    [0.0000000e+00]
    [1.0000000e+00]
    [0.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [0.0000000e+00]
    [0.0000000e+00]
    [1.0000000e+00]
    [2.7660945e-31]
    [1.0000000e+00]
    [1.0000000e+00]
    [0.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [0.0000000e+00]
    [2.9799326e-06]
    [0.0000000e+00]
    [1.0000000e+00]
    [5.6649113e-01]
    [0.0000000e+00]
    [0.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [1.0000000e+00]
    [4.7621374e-13]
    [1.0000000e+00]
    [3.2824305e-06]]
     

    #10187

    codingapple
    키 마스터

    일단 test 데이터셋도 학습용 데이터셋이랑 똑같이 전처리하고 255로 나누고 그랬는지 확인해야합니다

    그리고 predict() 안에는 X데이터만 잘 집어넣으셔야합니다 

    test용 데이터셋은 만들기 귀찮아서 예시로 전이학습때 만들어둔 val 데이터셋을 쓰자면 

     

    배치한개 = val_ds.take(1)

    for image,label in 배치한개:
      result = model.predict(image)

      for i, item in enumerate(result) :
        print('정답', label[i], '예측', item)

     

     

    그럼 출력결과는 

    정답 tf.Tensor(1, shape=(), dtype=int32) 예측 [1.]
    정답 tf.Tensor(0, shape=(), dtype=int32) 예측 [0.00025876]
    정답 tf.Tensor(0, shape=(), dtype=int32) 예측 [1.7366063e-16]
    정답 tf.Tensor(1, shape=(), dtype=int32) 예측 [0.9955279]
    정답 tf.Tensor(1, shape=(), dtype=int32) 예측 [0.6557688]
    정답 tf.Tensor(0, shape=(), dtype=int32) 예측 [1.3039844e-12]

    대충 잘 때려맞추는 것 같습니다 

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠