티스토리 뷰

데일리

1017 TensorFlow 2주차 강의 정리(컴퓨터비전)

꿀벌의달콤한여행 2020. 10. 17. 12:00

이 글은 introduction to tensorflow for artificial intelligence machine learning and deep learning라는 coursera 강의를 수강하며 정리한 내용입니다.

컴퓨터 비전

컴퓨터 비전은 컴퓨터가 이미지에 라벨을 붙이고 이해하도록 하는 분야를 말한다.

우리 사람은 셔츠가 무엇인지, 신발이 무엇인지 구분할 수 있지만 이것을 프로그래밍하는 것은 매우 어렵다. 예를 들어 옷 같은 걸 본 적이 없는 외계인이 나타났을 때 이 친구한테 어떻게 신발을 설명할 수 있을까? 아마 제대로 하는 것은 매우 어려울 것이다.

컴퓨터 비전은 이와 같은 문제를 가지고 있다. 그래서 이 문제를 해결하는 방법 중 하나는, 많은 옷 사진을 사용해서 컴퓨터에게 이게 무슨 사진인지를 말해주고 신발, 셔츠, 핸드백, 코트 등과 같은 것들의 차이점을 알려주는 패턴을 컴퓨터가 찾아내도록 하는 것이다.

이번에는 Fashion MNIST라는 데이터를 활용할 것이다. 70,000개의 의류 이미지가 10개의 카테고리로 나타나있고 이미지는 28 x 28 의 크기로 스케일링 되어있다. 보통 크기가 작은 이미지가 컴퓨터가 할 일이 적어져서 더 좋다. 하지만 당연히 물체와 특징이 구분될 정도의 충분한 info를 가지고 있어야 한다.

우리가 사용할 이미지의 특징(neural network를 학습시키기 쉬운 데이터 구조이기도 함)

  1. 28x28 크기로 스케일링
  2. 회색으로 스케일링
  3. label은 숫자로.

train_images = 28 x 28 크기의 흑백 이미지

train_labels = 09 등과 같은 숫자. 숫자로 이를 표현하는 이유는 두 가지 이유가 있다. 첫 번째는 컴퓨터가 텍스트보다 숫자를 더 이해하기 쉽기 때문이다. 두 번째는 bias를 줄일 수 있기 때문이다. 만약 우리가 09 를 영어 "ankle boot"로 했을 경우 이는 영미권에게 편견? 을 줄 수 있다. 대신 숫자로 이를 표현하면 여러 언어로 변환하기가 쉬워진다.

(강의에서 bias를 표현한 문장: Using a number is a first step in avoiding bias -- instead of labelling it with words in a specific language and excluding people who don’t speak that language! )

3개의 레이어

model = keras.Sequential([
  keras.layers.Flatten(input_shape=(28, 28)), # Flatten은 28x28의 square를 simple linear array로 변환해줌
  keras.layers.Dense(128, activation=tf.nn.relu), # hidden layer라고도 함. 128개의 뉴런이 여기 있음.
  keras.layers.Dense(10, activation=tf.nn.softmax)
])

2번째 레이어가 조금 특이한데, 앵클부츠를 예로 한번 생각해보자. 2번째 레이어는 middle layer 인데, 이를 hidden layer라고도 부른다. 128개의 뉴런이 이 안에 있다. 이 뉴런들을 한 함수 안에 변수라고 생각해보자(x1, x2, x3, etc).

이 함수 안에는 앵클부츠의 784개 값들을 9로 바꾸는 변수들을 통합하는 rule이 있다. 우리가 이미지를 직접 매핑하는 것을 확인하기에는 이 함수가 너무 복잡하지만, neural network가 하는 것이 이런 일이다.

데이터 로드

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
댓글