본문 바로가기

그냥, 코딩

[개발자를 위한 머신러닝&딥러닝] 컴퓨터 비전 소개

반응형

지난 포스팅

https://jamjamzo.tistory.com/114

 

[개발자를 위한 머신러닝&딥러닝] 텐서플로(Tensorflow) 사용하기

지난 포스팅 https://jamjamzo.tistory.com/112 [개발자를 위한 머신러닝&딥러닝] 텐서플로(Tensorflow) 소개 구성 1부(1~11장) : 다양한 문제를 해결하는 머신러닝 모델을 텔서플로로 구축하는 방법을 설명 2부

jamjamzo.tistory.com

 

Part1. 모델구축

2장 컴퓨터 비전 소개

 모델이 사진 속 사물을 인식하는 방법을 배워, 모델은 사진이 무엇이 있는지 볼 수 있다.  

2.1 의류 아이템 인식하기

 

2.1.1 패션 MNIST 데이터셋

출처: https://codetorial.net/tensorflow/fashion_mnist_classification.html

  • 패션 MNIST의 샘플 개수, 이미지 크기, 클래스 개수는 숫자 MNIST(0~9 손글씨)와 동일 
  • 전부 흑백 이미지
  • 픽셀 값은 0~255 사이
  • 그리드의 크기: 28  x  28

 

2.2 컴퓨터 비전을 위한 뉴런

  • 각 이미지는 0과 255 사이의 784개(28 x 28) 값으로 구성. 즉, X값(데이터값)
  • Y값, 데이터셋에 있는 이미지의 종류 10가지
  • 이미지마다 784개의 X값이 있고, 0~9 사이의 값이 Y값 => Y = mX + c
  • m : 가중치, c: 절편
  • 신경망을 훈련할 때, 각 뉴런은 랜덤하게 초기화된 가중치와 절편(m과 c)를 갖는다.
  • 그 다음 각 뉴런의 출력값을 더해 하나의 값을 얻는다. 
  • 출력 층에 있는 모든 뉴런에서 이 작업이 수행되고, 뉴런 0은 이 픽셀들이 레이블 0에 해당할 확률을 출력하고 뉴런 1은 레이블 1에 대한 출력을 만드는 식이다. 
  • 10개의 레이블이 있으므로 랜덤하게 초기화할 경우 정답의 약 10%를 맞춘다.
  • 손실 함수와 옵티마이저가 에폭마다 뉴런 안에 파라미터를 조정해 이 10%를 향상시킨다. 
  • 따라서 시간이 지나면 컴퓨터는 무엇이 신발이고 드레스인지 구별하는 법을 배우게 된다. 

 

2.3.  신경망 설계

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28,28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])
 

 

  • Sequential 모델은 여러 개의 층을 가질 수 있다. 
  • 첫번째 Flatten은 뉴런의 층이 아니라 입력을 위한 크기를 지정한다.
    • 입력은 28 x 28 크기의 이미지지만 한 줄로 펼친 숫자처럼 다룬다.
    •  즉, 2D 배열 -> 1D 배열 벡터로 변환 
  • Dense는 뉴런의 층
    • 뉴런 128개 지정(은닉 층; hidden layer)
    • 왜 128? 사용할 뉴런의 개수를 지정하는 일정한 규칙은 없다. 뉴런의 개수가 너무 많으면 파라미터가 더 많아지므로 실행 속도가 느려진다. 
    • 과대적합(overfiting): 뉴런이 많으면 훈련 데이터를 잘 학습하는 신경망이 만들어지지만, 본 적이 없는 데이터 처리는 버거워할 수 있다.
    • 하이퍼파라미터 튜닝(hyperparameter tuning): 적절한 값을 선택하려면 약간의 실험이 필요하다. 머신러닝에서 제어하는데 사용되는 값으로 훈련 또는 학습되는 뉴런의 내부 가중치(파라미터와 반대)이다.
  • 활성화 함수(activation function): 층의 각 뉴런에 적용되는 함수
    • 렐루(ReLU): 단순히 0보다 큰 값을 반환하는 간단한 함수. 다음 층의 계산에 음수값을 전달하고 싶지 않으므로 if-then 코드를 쓰는 대신 ReLU 활성화 함수를 사용할 수 있다. 
  • 출력층(Output Layer): 클래스가 10개이므로 10개의 뉴런을 둔다. 입력 픽셀이 해당 클래스에 속할 확률을 출력한다. 출력 층의 뉴런에서 출력된 값의 합이 1이 되도록 만든다.

 

2.3.1  전체 코드

https://colab.research.google.com/drive/1bK_M3KsQIv2HPlq2_8W29btEkPvGQ8jP?usp=sharing 

 

개발자를 위한 머신러닝&딥러닝_2.3.fashion_mnist_신경망설계.ipynb

Colaboratory notebook

colab.research.google.com

 


 

 

 

 

반응형