본문 바로가기

머신러닝/혼자 공부하는 머신러닝

17강 인공 신경망 -> 간단한 인공 신경망 모델 만들기

이 글은 https://www.youtube.com/watch?v=ZiP9erf5Fo0&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=17&t=2s 보고 공부한 글 입니다.

 

 

지난 시간에 

차원 축소인 pca를 배웠다. 

 

원본 데이터의 분산이 많은 곳을 백터로 지정한다.

 

주성분은 몇개를 찾던지 원본 차원과 동일하다.

 

 

패션 MNIST 

패션 럭키벡 이밴트를 만들었다.

 

mnist는 기본이되는 데이터 셋이다.

 

0~9를 손으로 쓴 이미지 데이터이다. 28*28로 되어있고 6만개가 있다. 

 

패션 mnist는 10개의 클래스가 있다.

28*28흑백 이미지

6만개가 있다.

 

fashion_mnist.load_data()를 하면 입력데이터와 타겟데이터를 가지고 온다.

 

6만개의 셈플과 28*28개의 이미지가 있는 차원이다.

 

타깃데이터는 1차원으로 되어있다.

 

입력과 타깃 샘플 

타깃을 보면 0~9까지 6000개가 골고루 있다.

 

 

로지스틱 회귀로 패션 아이템 분류하기 

0~255 사이의 픽셀값을 전처리해야 한다.

 

reshape으로 3차원 배열을 하나의 배열로 만든다.

 

60000개 샘플이 있고 784개의 특성(픽셀)이 있다.

 

교차검증을 사용하면 82%의 적중도가 나온다.

5-fold의 평균값이다.(검증 점수)

 

1개의 셈플의 픽셀이 784개가 쭉 나열되어 있다.

 

z=픽셀1 * w1 + 픽셀2 * w2 +..... 

해서 784개의 값을 구한다.

 

즉 클래스마다 다른 가중치와 곱해진다

 

 

인공신경망으로 모델 만들기 

가장 간단한 인공신경망은 출력층 1개만있는 인공신경망이다.

 

딥러닝은 출력층이 많다.

 

확률을 얻기위한 마지막 층 = 출력층

입력데이터가 놓여있는 층 = 입력층

 

라이브러리에 따라 입력층을 객체로 만들 수 있다.

 

텐서플로와 케라스 

2개의 라이브러리를 사용해서 공부하자.

 

케라스 모델 만들기 

교차검증을 하지 않는다.

데이터가 많아서 신뢰성이 있다.

데이터가 많아서 오래걸린다.

 

test_size를 0.2로 20%를 test세트로 때어 냈다.

 

60000개중에 48,000개 12,000개로 나눴다.

 

10개(클래스의 갯수)층을가진 뉴런을 만들 것이다.

 

케라스 가장 기본이되는 층이 Dense에 있다.

밀집층, 완전연결층 이라고도 부른다.

 

항상 출력층은 클래스 개수와 같아야 한다. 

 

다중분류를 할 것이니 activation='softmax'를 사용했다. 

이중분류였다면 activation='sigmoid'를 사용했을 것이다.

 

모델에 추가되는 층이 출력층 1개뿐이다. 

 

(관례)

첫 번째 모델에 추가되는 층에는 input_shape지정해야한다. 

input_shape은 샘플의 크기이다. 

샘플 1개는 784개의 특성을 가진 배열로 나타나있기 때문이다. 

튜플로 784개를 가진 배열로 준다.

 

모델에 출력층을 집어넣어줘야 한다. 

 

Sequential()로 층을만든다.

 

 

모델 설정 

일단 손실함수를 지정해야 한다.

 

손실값, 정확도를 보고싶다. 하면 compile() 메소드를 사용하면 된다.

 

여기서 compile = 설정이다.

 

sparse_가 왜 붙었냐? 답은 정수값이였다.

출력층의 10개의 확률값이 나온다. 

확률에 -log를 취해서 타깃값과 곱한다.

 

ex)

티셔츠 샘플은 첫번째가 1이고 나머지가 다 0인 원핫 인코딩이 되어있어야지

나머지가 0으로 되어서 손실이 계산이 될것이다. 

타깃값을 원핫 인코딩해야 한다.

 

그냥 정수 데이터를 사용하고 싶어서 sparse_를 사용한 것이다.

 

즉, 원핫인코딩이 되어있다 = sparse_를 안써도 된다.

 

인공신경망으로 패션 아이템 분류하기 

fit으로 훈련한다.

loss는 줄어들고, accuracy(정확도)는 늘어간다.

 

evaluate로 평가할 수 있다.

 

 

사이킷런- 케라스 비교 

사이킷런은 

클래스를 만들 때 가능한 많은 매개변수로 설정한다.

 

케라스는 

층을 설정하고 

compile매서드에서 설정을 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90