[AMD DL STUDY] 4주차 ch10 ~ ch12

Loloh_the_great·2023년 12월 27일
0

AMD-DL

목록 보기
5/12
post-thumbnail

4째 마당 : 딥러닝 기본기 다지기

reference
https://github.com/taehojo/deeplearning

그동안 딥러닝에 대한 이론을 배웠으니 이후엔 책에 있는 실전 프로젝트를 실제로
진행해 보며 프로젝트마다 어떠한 머신러닝 기법을 쓸 수 있는지 배워볼 수 있을 것이다.

10장 딥러닝 모델 설계하기

9장까지는 딥러닝에 대한 이론을 배웠다면 이후에는 텐서플로, 케라스 등을 활용하여 실전에서는 어떤 식으로 구현 되는지 알아볼 것이다.
2장에서 했던 '폐암 수술 환자의 생존율 예측하기' 예제를 분석을 해볼 것이다.

1) 모델의 정의 '폐암 수술 환자의 생존율 예측하기'의 코드이다.

딥러닝의 모델 설정과 구동은 model이라는 함수를 선언하며 시작한다.

model = sequential() : 이 부분은 딥러닝의 구조를 짜고 층을 설정하는 부분이다. 
model.compile() : 컴퓨터가 알아듣도록 컴파일하는 부분이다.
model.fit() :모델을 실제로 수행하는 부분이다.

2. 입력층, 은닉층, 출력층

딥러닝의 구조와 층을 설정하는 부분은 다음과 같다.

#딥러닝 모델의 구조를 결정합니다.
model = Sequential()                                                   
model.add(Dense(30, input_dim=16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

셋째 마당에서 딥러능은 입력층과 출력층 사이에 은닉층들을 추가하여 학습하는 것임을 배웠다.
sequential() 함수를 model로 선언한 후 model.add()를 추가하면 새로운 은닉층이 만들어진다.

model.add()가 두 개 있으므로 층을 두 개 가지며, 마지막 층이 출력층 나머지는 은닉층이다.

각각의 층은 Dense라는 함수로 구조가 결정되는데 Dense()의 첫 번째 인자는 몇 개의 노드인지 알려준다.

input_dim이라는 변수는 입력 데이터에서 몇 개의 변수를 쓸 것인지를 말한다.

keras는 첫 번째 은닉층에 input_dim을 적어 줌으로 첫 번재 Dense가 은닉층 + 입력층의 역할을 한다.

두 번째 model.add()는 출력층이며 출력이 하나이므로 노드 수는 하나이고 활성화 함수를 시그모이드 함수를 사용한 것이다.

3. 모델 컴파일

 #딥러닝 모델을 실행합니다.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 

model.compile()은 앞에서 지정한 모델이 효과적으로 구현되도록 환경을 설정해서 컴파일한다.

여기서 loss 부분은 어떤 오차함수를 사용할 것인지를 말하며 평균 제곱 오차교차 엔트로피 오차 중 이 예제에서는 생존과 사망 둘 중 하나를 예측하므로 교차 엔트로피 오차 함수를 적용하기 위해 binary_crossentropy를 사용하였다.

손실 함수를 통해 계산된 오차는 optimizer를 적절히 활용하도록 만들어 준다.

이항 분류는 binary_crossentropy, 다항 분류에는 categorical_crossentropy를 사용한다.

이후 옵티마이저는 가장 많이 쓰는 adam을 사용하고, 모델이 컴파일 후 수행의 결과를 나타내게끔 metrics()를 사용한다. accuracy는 정확도에 기반해서 결과를 출력한다. accuracy말고 학습셋에 대한 손실값을 나타내는 loss, 테스트셋의 정확도를 나타내는 val_acc, 테스트셋에 대한 손실 값을 나타내는 val_loss 등이 있다.

4 모델 실행하기

history=model.fit(X, y, epochs=5, batch_size=16)

책에 데이터는 470명의 환자에게서 16개의 정보를 정리한 것인데 이러한 정보를 속성이라고 한다. 또한 각 환자의 정보를 샘플이라고 한다. 학습 프로세스가 모든 샘플에 대해 한 번 실행되면 1 epoch이라고 하는데 각 샘플을 다섯 번 재사용한다는 뜻이다.

batch_size는 샘플을 한 번에 몇 개씩 처리할지 정하는 부분으로 샘플을 16개씩 끊어서 넣는다는 뜻이다. 만약 batch_size가 너무 크면 학습속도가 느려지고, 작으면 각 실행 값의 편차가 생겨서 전체 결과가 불안정해지므로 컴퓨터 메모리가 감당할 만큼의 batch_size를 찾아 설정해주는 것이 좋다.

11장 데이터 다루기

1. 딥러닝과 데이터

머신 러닝 프로젝트의 큰 핵심은 얼마나 좋은 데이터를 가지고 있느냐에 달려있다.
한 쪽으로만 치우쳐 있거나 불필요한 정보 또는 왜곡 되지 않은 데이터를 가지고 있느냐가 중요하다.
책에서는 데이터 분석에 가장 많이 사용하는 파이썬 라이브러리인 Pandasmatplotlib 등을 사용해 딥러닝의 핵심 기술들을 구현하고 있다.

2. 피마 인디언 데이터 분석하기

책에서는 피마 인디언이라는 민족의 당뇨병과 비만에 대한 데이터 분석 예제를 제시한다.

3. 판다스를 활용한 데이터 조사

데이터의 크기가 크고 정보량이 많으면 데이터를 시각화하여 내용 파악에 용이하게 하는 방법이 필요하다.
책에서는 데이터를 불러와 그래프로 표현하는 방법을 활용하였다.

4. 중요한 데이터 추출하기

히스토그램을 보여주는 hist() 함수를 이용하여 정상과 당뇨 여부의 분포를 알 수 있다.

5. 당뇨병 예측 실행

데이터 프레임의 대괄호 범위만큼 가져와 저장하는 iloc[] 함수를 사용하여 예측을 해준다.

막간)
처음 텐서플로를 install 했을 때 2.6.1버전으로 라이브러리를 설치했는 데 이렇게 하면 pandas를 설치하고 나서 실행하면 np.object()라는 것에서 error가 발생한다고 나오며 실행되지 않는다. 이를 해결하기 위해

!pip install --upgrade tensorflow

를 작성하여서 해결해준다.

12장 다중 분류 문제 해결하기

이 예제에서는 아이리스 라는 꽃이 참과 거짓으로 해결하는 것이 아닌 여러 개 중에 어떤 것이 답인지 예측하는 다중 분류(multi classification)이다. 이 예제는 원-핫 인코딩이라는 문자열을 0과 1로만 이루어진 형태로 만들어주는 과정과 소프트맥스라는 각 항목당 예측활률을 0과 1 사이의 값으로 나타내 주는 함수이다.

profile
병아리 전자공학부생

0개의 댓글