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

home2 게시판 Python, SQL 게시판 cnn 실습 질문 드립니다.

cnn 실습 질문 드립니다.

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

    김원혁
    참가자

     딥 러닝 강의 많은 도움이 되고 있습니다. 감사합니다.

     개와 고양이 구분하는 코드 실습 질문 드립니다. 모델 학습까지 실습해보고 더 나아가서 사진 한 장을 구해서 model.predict()를 수행해 보았습니다. 그런데 예측률이 50% 대에 멈춰있습니다. 제 코드에 문제가 있는지 궁금합니다.

     추가적으로 적은 제 코드는 아래와 같습니다. 

    img = tf.keras.preprocessing.image.load_img('ttt.jpg', target_size=(64,64)) 

    img_tensor = tf.keras.preprocessing.image.img_to_array(img) 
    img_tensor = tf.expand_dims(img_tensor, axis=0)
    img_tenser = img_tensor / 255.0
    result = model.predict(img_tensor)
    score = tf.nn.sigmoid(result[0])

    print("예측률 :", 100 * np.max(score))

     

    #10133

    codingapple
    키 마스터

    img_tenser = img_tensor / 255.0 혹시 이거 오타가 아닐까요

    img_tensor여야할듯합니다 

    #10135

    김원혁
    참가자

     답해주셔서 감사드립니다.

     rgb 값을 0 ~ 1 사이의 값으로 만드려고 해서 넣었습니다. 그런 목적이라면, 코드를 이렇게 작성하면 안 될까요?

     그리고 해당 문장을 지워서 실행해 보았는데, 여전히 50%가 나옵니다...ㅜ 어떻게 하면 좋을까요?

    #10143

    codingapple
    키 마스터

    지우라는게 아니라 tenser -> tensor 오타라는 소리였습니다 

    255로 나눠서 학습돌렸으면 새로운 이미지로 predict할 때도 255로 나눠야합니다 

    result 라는 변수엔 무엇이 담겨서 나오나요?

    #10156

    김원혁
    참가자

    아 오타가 있었네요...ㅎㅎ

    tenser -> tensor로 고치고, 그 문장을 넣어도, 안 넣어도 예측률이 크게 다르지 않습니다...

    그 밑에, 다음 코드를 넣어봤습니다.

    print('result :', result)
    print('type :', type(result))
    print('result[0] :', result[0])
    print('score :', score)
    print("예측률 :", 100 * np.max(score))

    (결과)

    result : [[0.02573797]]
    type : <class 'numpy.ndarray'>
    result[0] : [0.02573797]
    score : tf.Tensor([0.50643414], shape=(1,), dtype=float32)
    예측률 : 50.64341425895691

    #10163

    codingapple
    키 마스터

    그냥 result라는 변수가 개인지 고양이인지 알려주고 있을 뿐입니다. sigmoid 함수에 집어넣을 필요 없습니다 

    개고양이 사진을 전처리할 때 하나는 0, 하나는 1로 라벨링을 했고

    그리고 학습모델은 0~1사이로 결과를 뱉어주는 모델을 만들었습니다 

    그래서 model.predict() 결과가 0.02가 나오면 넣은 이미지의 답이 1일 가능성이 0.02라고 생각하시면 되겠습니다 

    #10180

    김원혁
    참가자

    아하, 설명해주셔서 정말 감사드립니다^^

    제가 다른 주제로 데이터셋을 따로 준비해서 돌려보았습니다. 이것 역시 두 가지 클래스로 분류합니다.

    그런데, 전혀 새로운 사진을 result = model.predict()한 결과 값이 숫자 0에 매우 가깝게 나옵니다.

    두 사진 다 0으로 라벨링 된 클래스로 분류되었다는 뜻이겠지요?

    잘 맞추게 하려면 어떻게 해야할까요? 데이터셋을 만 장 이상 준비해야 하는게 맞을까요?

    아니면 다른 방법이 있을까요?ㅠㅠ

     

    #10188

    codingapple
    키 마스터

    정답이 0과 1인데 predict값이 0.5미만이면 0으로, 0.5이상이면 1로 분류했다고 판단하면 됩니다. 

    여러개를 predict 해보시고 정확도가 50프로에 가깝다면 객관식으로 때려맞추고 있는 경우기 때문에 그 이유는 

     

    1. predict용 데이터 전처리가 학습용 데이터 전처리랑 달라서 뭔가 잘못되었거나 

    2. 학습시 정확도가 낮아서 그런 경우밖에 없습니다 

    정확도를 높이려면 데이터가 매우 많이 필요합니다. 이미지의 필요없는 배경을 자르거나 이미지를 증강하거나 그런 방법으로 데이터의 질과 양을 높이는 방법도 유효합니다  

    #10192

    김원혁
    참가자

    아아 도움 정말 많이 되었습니다.

    정말 감사드립니다~

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

About

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

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

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