-
글쓴이글
-
2021년 6월 6일 18:10 #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))
2021년 6월 6일 22:14 #10133
codingapple키 마스터img_tenser = img_tensor / 255.0 혹시 이거 오타가 아닐까요
img_tensor여야할듯합니다
2021년 6월 6일 22:41 #10135
김원혁참가자답해주셔서 감사드립니다.
rgb 값을 0 ~ 1 사이의 값으로 만드려고 해서 넣었습니다. 그런 목적이라면, 코드를 이렇게 작성하면 안 될까요?
그리고 해당 문장을 지워서 실행해 보았는데, 여전히 50%가 나옵니다...ㅜ 어떻게 하면 좋을까요?
2021년 6월 7일 09:35 #10143
codingapple키 마스터지우라는게 아니라 tenser -> tensor 오타라는 소리였습니다
255로 나눠서 학습돌렸으면 새로운 이미지로 predict할 때도 255로 나눠야합니다
result 라는 변수엔 무엇이 담겨서 나오나요?
2021년 6월 7일 13:57 #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.643414258956912021년 6월 7일 16:10 #10163
codingapple키 마스터그냥 result라는 변수가 개인지 고양이인지 알려주고 있을 뿐입니다. sigmoid 함수에 집어넣을 필요 없습니다
개고양이 사진을 전처리할 때 하나는 0, 하나는 1로 라벨링을 했고
그리고 학습모델은 0~1사이로 결과를 뱉어주는 모델을 만들었습니다
그래서 model.predict() 결과가 0.02가 나오면 넣은 이미지의 답이 1일 가능성이 0.02라고 생각하시면 되겠습니다
2021년 6월 8일 01:38 #10180
김원혁참가자아하, 설명해주셔서 정말 감사드립니다^^
제가 다른 주제로 데이터셋을 따로 준비해서 돌려보았습니다. 이것 역시 두 가지 클래스로 분류합니다.
그런데, 전혀 새로운 사진을 result = model.predict()한 결과 값이 숫자 0에 매우 가깝게 나옵니다.
두 사진 다 0으로 라벨링 된 클래스로 분류되었다는 뜻이겠지요?
잘 맞추게 하려면 어떻게 해야할까요? 데이터셋을 만 장 이상 준비해야 하는게 맞을까요?
아니면 다른 방법이 있을까요?ㅠㅠ
2021년 6월 8일 10:07 #10188
codingapple키 마스터정답이 0과 1인데 predict값이 0.5미만이면 0으로, 0.5이상이면 1로 분류했다고 판단하면 됩니다.
여러개를 predict 해보시고 정확도가 50프로에 가깝다면 객관식으로 때려맞추고 있는 경우기 때문에 그 이유는
1. predict용 데이터 전처리가 학습용 데이터 전처리랑 달라서 뭔가 잘못되었거나
2. 학습시 정확도가 낮아서 그런 경우밖에 없습니다
정확도를 높이려면 데이터가 매우 많이 필요합니다. 이미지의 필요없는 배경을 자르거나 이미지를 증강하거나 그런 방법으로 데이터의 질과 양을 높이는 방법도 유효합니다
-
글쓴이글
- 답변은 로그인 후 가능합니다.