관리 메뉴

ComputerVision Jack

[스터디 CNN 예제] 본문

DeepLearning Study/모두의 딥러닝 예제

[스터디 CNN 예제]

JackYoon 2020. 5. 12. 12:40
반응형

이번 스터디에선 개와 고양이 사진으로 분류기 모델(CNN)을 tensorflow로 만들어 보는 작업을 해보았습니다.

먼저 구글 드라이브에 사용할 자료를 업로드 하였습니다.

 

dataset

우선 이미지 경로로부터 데이터를 얻어오기 위해 작업합니다.

<코드>

def selectImg1(image_pathnum):

  fname = 'cat.{}.jpg'.format(num)

  img_path = os.path.join(image_path, fname)

  return img_path

 

def selectImg2(image_pathnum):

  fname = 'dog.{}.jpg'.format(num)

  img_path = os.path.join(image_path, fname)

  return img_path

 

def preprocess_img(img_pathtarget_size = 100):

  from keras.preprocessing import image

 

  img = image.load_img(img_path, target_size = (target_size, target_size))

  img_tensor = image.img_to_array(img)

  

  img_tensor = np.expand_dims(img_tensor, axis = 0)

  img_tensor /= 255.

  return img_tensor

 

result = []

label = []

for i in range(1000):

  img_path = selectImg1(image_cat, i)

  result.append(preprocess_img(img_path))

  label.append(0)

 

for i in range(1000):

  img_path = selectImg2(image_dog, i)

  result.append(preprocess_img(img_path))

  label.append(1)

 

#이런식으로 함수를 통해 경로에 있는 데이터의 값을 가져왔습니다. 

가져올 데이터의 사이즈는 100 x 100사이즈로 설정하였고, 데이터는 traintest로 각각 나누었습니다.

 

데이터를 리스트에 append 시키는 방식으로 사용하였기 때문에 list를 array로 변환하는 작업이 필요합니다.

또한 이 과정에서 reshape을 통해 array의 shape도 변경했습니다.

 

<코드>

result = np.array(result)

label = np.array(label)

 

result=np.reshape(result,[-1,100,100,3])

label=np.reshape(label,[-1,1])

 

#라벨값 같은 경우 고양이는 0 개는 1과 같은식으로 변경하여 고양이가 들어올땐 0, 개가 들어오면 1로 빈 공백리스트에 라벨 값을 따로 분류하였습니다.

 

코드 캡쳐

#다음은 이런식으로 레이어를 구성했습니다.

중간중간 shape을 찍어보는 과정을 통해서 shape에 관해 오류가 발생할 가능성을 미리 방지했습니다.

또한 마지막 L4 레이어 같은 경우 flatten 작업을 거쳐 1열로 모든 데이터를 뽑아냅니다.

 

<코드>

L4_flat = tf.reshape(L4, [-1, 7 * 7 * 256])

 

#마지막으로 deep하게 softmax를 적용시켜 모두의 딥러닝때 배운 과정을 적용시키면 됩니다.

마지막 결과 화면
CatDogCNN.ipynb
0.03MB

반응형
Comments