@@@ 인공지능/수학·통계를 몰라도 이해할 수 있는 쉬운 딥러닝

1 - 4. FNN 활용하기(2)

HTG 2021. 7. 7. 15:29
728x90

1-4-1. [의료 AI] BMI(비만도) 분성을 위한 키, 체중 추론

 

●데이터 살펴보기

앞서 활용한 육군 장병 신체검사 데이터가 수록된 csv 파일

가슴 둘레, 소매 길이, 허리 둘레, 샅높이, 머리 둘레, 발 길이 총 6개의 피쳐를 X값

키와 몸무게를 Y값

모든 데이터는 0부터 1사이 수치로 노멀라이즈

 

●어떤 인공지능 사용?

전에 활용한 AI 구조 - 6층 FNN

층수 종류 크기 활성화 함수
1층 FNN 6 없음
2층 FNN 256 ReLu
3층 FNN 256 ReLu
4층 FNN 256 ReLu
5층 FNN 256 ReLu
6층 FNN 256 sigmoid

입력층은 피쳐 개수를 줄여 6개로 줄여 6

출력층은 2가지 종류 값을 동시에 회귀분석 하기 위하여 2

 

●딥러닝 코딩

옵티마이저(optimizer) - Adam

메트릭(metrics) - mse

로스(loss) - mae

 

●인공지능 학습

인공신경망 학습

fit 을 통해 학습

 

학습 결과 출력

그래프로 출력

model(dr.test_X) 명령을 통해 인공지능에 test_X를 입력하여 출력 결과 뽑아냄.

 

●인공지능 학습 결과 확인

인공지능 성능 확인하기

저자의 경우 22에포크에서 학습이 멈춤 -> 학습 최종 성능은 MAE 기준 1.45% 오차 기준

-> 거의 98% 이상 정답에 근접한 수치를 예측.

나의 경우 19에포크에서 학습이 멈춤 -> 학습 최종 성능은 MAE 기준 1.54% 오차 기준

 

학습 기록 확인하기

빨간 선이 train, 파란 선이 test

저자의 경우 테스트 로스 자체는 전반적으로 상당히 안정적. 일부 구간에서 트레이닝 로스보다 낮은 값을 보이기도 함.

회귀 결과 또한 짙은 선의 축을 따라 얇게 분포. 학습이 아주 잘 된 것을 보임.

나의 경우 후반에 갑자기 불안정한 모습을 보였지만 전반적으로 안정적으로 보임.

회귀 결과도 짙은 선의 축을 따라 얇게 분포하여 학습이 잘 된 것으로 보임.

 

FNN Regression을 활용해 여러 개의 값 회귀.

앞서 7개의 피쳐를 학습해 1개의 값을 회귀하는 AI, 6개의 피쳐를 학습해 2개의 값을 회귀하는 AI를 만들어 보았음.

아무래도 AI에 입력하는 정보가 줄어들면 줄어들수록 학습 난도가 올라가고, AI가 추론해야하는 정보의 규모가 늘어날 수록 학습 난도가 올라갈 수밖에 없음.

농업에서 이온 센서 신호를 처리할 때에는 4개의 피쳐를 받아 4개의 값을 추론하는 회귀 모델을 제작하기도 함.

현실 데이터의 피쳐를 분해하는 등 경우 1~3개의 피쳐를 입력받아 수십 개의 값을 추론하는 회귀 모델을 제작하는 경우도 있음.

딥러닝을 사용하지 않는다면 매번 새로운 회귀 알고리즘을 개발할 필요가 있음.

딥러닝을 활용한 회귀 모델이 이럴 때 유용. 입력층과 출력층의 크기만 조절하면 같은 코드를 여러 곳에 바로 적용할 수 있음.

 

하이퍼 파라미터의 수정

2층부터 4층까지 신경망의 크기가 256으로 세팅.

하이퍼 파라미터 수정을 통해 AI의 성능이 변화하는지 알아보자.

높은 층으로 갈수록 크기가 작아지도록, 낮은 층으로 갈수록 크기가 작아지도록 파라미터 수정 후, 성능 변화를 살펴보자.

 

높은 층으로 갈수록 32, 64, 128, 256 으로 신경망 크기를 증가시켰을 때. 

이 경우, 13에포크에서 멈춤. mae 기준 1.83% 정도의 성능을 보임.

loss의 경우 불안정한 모습을 보이고 회귀의 경우 괜찮은 성능을 보이는 것 같음

 

높은 층으로 갈수록 256, 128, 64, 32 으로 신경망 크기를 감소시켰을 때.

이 경우, 27에포크에서 멈춤. mae 기준 1.42% 정도의 성능을 보임.

loss의 경우 더 안정된 모습을 보이고 회귀의 경우 더 괜찮은 성능을 보이는 것 같음