Tensorflow 102 - 이미지 분류(CNN)

내 이미지 사용하기

강의

실습

소스코드

colab |  backend.ai

###########################
# 라이브러리 로딩
import glob
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf 

###########################
# 이미지 읽어서 데이터 준비하기
paths = glob.glob('./notMNIST_small/*/*.png')
paths = np.random.permutation(paths)
독립 = np.array([plt.imread(paths[i]) for i in range(len(paths))])
종속 = np.array([paths[i].split('/')[-2] for i in range(len(paths))])
print(독립.shape, 종속.shape)

독립 = 독립.reshape(18724, 28, 28, 1)
종속 = pd.get_dummies(종속)
print(독립.shape, 종속.shape)

###########################
# 모델을 완성합니다. 
X = tf.keras.layers.Input(shape=[28, 28, 1])

H = tf.keras.layers.Conv2D(6, kernel_size=5, padding='same', activation='swish')(X)
H = tf.keras.layers.MaxPool2D()(H)

H = tf.keras.layers.Conv2D(16, kernel_size=5, activation='swish')(H)
H = tf.keras.layers.MaxPool2D()(H)

H = tf.keras.layers.Flatten()(H)
H = tf.keras.layers.Dense(120, activation='swish')(H)
H = tf.keras.layers.Dense(84, activation='swish')(H)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)

model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')

###########################
# 모델을 학습
model.fit(독립, 종속, epochs=10)

###########################
# 모델을 이용합니다. 
pred = model.predict(독립[0:5])
pd.DataFrame(pred).round(2)

# 정답 확인
종속[0:5]

# 모델 확인
model.summary()

 

 

댓글

댓글 본문
  1. hoddigi
    완료
  2. 여어엉
    완료
  3. 제사마
    Done
  4. John
    완료
  5. 과거로의여행
    흐흐흐... 두 번을 봤는데...
    ㅎㅎㅎ... 좀 더 이해가 되긴하네요. ㅎㅎㅎ
  6. 과거로의여행
    OK~~~
    근데요, 이미지 한장으로 판단을 하지 못하는 것도 있지 않나요?
    예를 들면 병원에서 사용하는 X-ray 단층 사진이나 MRI 단층 사진은 여러장을 보고, 병(암)이 있는지? 없는지? 판단하는 것 같은거요.
    이런 것들은 단순하게 CNN으로 되지는 않을 것 같은데요. 궁금해 지네요.
    요즘 의료 분야 인공지능 벤처기업들이 많이 생겨나고, 실제로 병원에 활용되고 있기도 하던데 말이죠.
    그런 것들은 아주 고급으로 어렵겠죠???
    아~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  7. VIBOT
    ok
  8. 완료
  9. CrashOverride
    5일차 시작
  10. YoonJae
    제가 파이참으로 실행해서 그렇네요 / 가 아닌 \\ 로 수정하니 원하는 값을 얻을 수 있었습니다.
    대화보기
    • 이선비
      종속 변수 원핫인코딩을 안하신 것 같아요. 이미지 샘플 데이터의 경우는 원핫인코딩을 하지 않아도, sparse_ctegorical_crossentropy를 설정하면 모델 내부에서 원핫인코딩하여 결과를 냅니다.
      다만, 이 경우 종속변수가 문자열로 되어있을 경우에는 사용할 수 없고, 숫자 인덱스로 변환이 되어있어야 합니다.
      대화보기
      • YoonJae
        강의 잘 봤습니다.

        마지막에 loss = 'sparse_categorical_crossentropy' 로 바꿔야지 프로그램이 돌아가는데 맞나요?

        'categorical_crossentropy'로 하면

        Shapes (None, 1) and (None, 10) are incompatible 로 나옵니다.
      • briliant6424
        21/01/10 완료
      • 행여
        감사합니다~!♡
      • 유니엘
        완료.
        수고하셨습니다.
        잘봤습니다.^^
      • ukmadang
        다 듣고 반복하러 갑니다!
      • younghwani
        21.01.08 완료! 좋은 강의 감사합니다~
      버전 관리
      이선비
      현재 버전
      선택 버전
      graphittie 자세히 보기