지난 시간에는 ANN 구현을 위한 dataset을 preprocessing해보았다면 이번에는 해당 자료를 통해서 직접 ANN을 구축해볼 생각이다.
인공 신경망이될 변수를 만들어준다.
직시적으로 ann이라는 변수를 사용해 보도록 하겠다.
그다음 입력층을 추가해 주어야하는데, 덴스레이어를 불러온후 댄스레이어의 은닉층의 숨길뉴런의 수를 지정할 수 있는데 해당 Dense 레이어의 수를 몇으로 조정하는 것이 가장 효율적인지는 수많은 시행 착오를 통해 (즉 무한 반복) 최적의 하이퍼 파라미터로 설정하는 것이 목표이기는 하지만, 일반적으로 늘어났다가 다시줄어드는 <-0-> 이러한 모양으로 설계를 하는것이 효율이 좋다. 그리고 활성화 함수는 relu를 사용하게 되는데 relu를 간단하게 설명하자면 "0보다 작을때는 0으로 출력, 0보다 클 경우에는 그대로 출력한다." 라고 생각하면된다.
데이터 증강기법이나(data augmentation) Dropout을 사용해주면 보편적으로 성능은 증가하지만 가장 기본적인 실습을 진행하기위해 생략한다.
이렇게 첫번째 레이어를 만든후 그대로 2번을 더 수행해 주면 되는데.
중요한건 output layer에 노드를 1개로 설정하고 활성화 함수는 sigmoid를 사용해야 한다는 것이다. 시그모이드는 이진 클래스에 대한 확률을 알려주는 활성화 함수이기에 예측에 용이하여 사용하는 것이다.
학습을 시켜주면 되는데
위처럼 optimizer,loss,metrics를 지정해 주면된다.
필자는 정말 여러번 optimizer를 바꿔가며 모델을 학습시키는걸 좋아하는데 사실 결국 돌고돌아 adam이라는 생각을 자주 한다,, :) 시간이 촉박하다면 adam은 default로 생각하고 다른 부속품을 바꿔가며 튜닝하는것을 개인적으로 추천한다!
사실 '모델학습' 이라는 단어보다 '피팅'이라는 표현을 더자주 사용한다고 느끼는데 그이유는 모델학습을 하는 매써드가 fit 매써드이기 때문이다.
이렇게 100epochs(항상 s 붙이는거 잊지말자!)까지 가면
0.5로 시작하였던 acc가 0.8660까지 올라온걸 확인할 수 있다!