공부/Deep Learning

혼자 공부하는 머신러닝 + 딥러닝 7장

유스베리이 2023. 11. 12. 03:11

7-1 인공신경망

 

 로지스틱 회귀(왼) 인공 신경망(오)

 

<용어>

뉴런(=유닛) : 인공 신경망에서 z값을 계산하는 단위 ex)z1~ z10 (z_티셔츠, z_바지... )

출력층: z1~z10 을 계산하고 클래스를 예측하여, 신경망의 최종 값을 만듦 . 선형 계산만 발생

입력층: 인공 신경망에서 픽셀값 자체, 특별한 계산 하지않음 ex)x1~x784 (픽셀1,픽셀2 ...)

 

 

인공 신경망 모델

 

1. 텐서플로와 케라스

구글이 2015년 11월 오픈소스로 공개한 딥러닝 라이브러리 ; 인기가 제일 많음

from tensorflow import keras

 

텐서플로에는 저수준의 API / 고수준의 API (케라스;딥러닝 라이브러리) 포함 

 

 

딥러닝 라이브러리 

머신러닝 라이브러리와 달리 GPU(그래픽 처리 장치) 사용해 인공 신경망을 훈련

GPU는 벡터와 행렬 연산에 매우 최적화

 

 

인공 신경망에서는 교차 검증을 사용하지 않고 검증 세트를 별도로 덜어내어 사용

1. 딥러닝 분야의 데이터셋은 충분히 크기 떄문에 검증 점수가 안정적

2. 교차 검증을 수행하기에는 훈련 시간이 너무 오래 걸림

 

밀집층:

- 가장 간단한 인공 신경망의 층

- 뉴런들이 모두 연결되어 있어 완전연결층이라고도 부름

- 출력층에 밀집층을 사용할 때는 분류하려는 클래스와 동일한 개수의 뉴런 사용

 

dense = keras.layer.Dense(10, activation = 'softmax ', input_shape(784,))

//10: 뉴런의 개수 (클래스 개수)
// softmax : 10개의 뉴런에서 출력되는 값을 확률로 바꾸기 위해서 ; 활성화 함수 ( 뉴런의 선형 방정식 계산 결과에 적용되는 함수)
// 입력값의 크기 ;10개의 뉴런이 각각 몇 개의 입력을 받는지 튜플로 지정

model = keras.Sequential(dense) 

//sequential 클래스를 통해 앞에서 만든 밀집층의 객체 dense전달해서 만든 model 이라는 신경망

model.compile (loss = 'sparse_categorical_crossentropy',metrics='accuracy')
//compile() : 손실함수를 설정
// categorical_crossentropy : 다중 분류  | binary_crossentropy : 이진 분류
// metrics = 'accurancy' : 정확도 지표 출력

 

이진 분류인 경우

 

 

출력층의 뉴런이 하나, 뉴런이 출력하는 확률값 a (시그모이드 함수의 출력값)를 사용해 양성/음성 클래스에 대한 크로스 엔트로피를 계산 후 ,

                   양성인 경우는 1 / 음성은 0

 

 

 

다중 분류인 경우

 

 

 

 

출력층은 뉴런이 10개, 각 클래스에 대한 확률이 모두 출력되므로 타깃에 대한 확률 제외 다 0을 곱함.

 

                      > 원-핫 인코딩 <

타킷값을 해당 클래스만 1이고 나머지는 0인 배열로 만드는 것. 

 

 

 

 

 

 


 

하지만, 텐서플로에서는 정수로 된 타깃값을 원-핫 인코딩으로 바꾸지 않아도 사용가능

sparse_categorical_crossentropy ; 정수로된 타깃값을 사용해 크로스 엔트로피 손실을 계산 가능

 

 

model.fit(train_target, epochs = 5) 

 

 

검증 세트의 점수는 훈련 세트 점수보다 조금 낮은 것이 일반적.  --> 83% 정확도