6주차
Ch. 07 딥러닝을 시작합니다
ㄴ 07-1 인공 신경망
ㄴ 07-2 심층 신경망
ㄴ 07-3 신경망 모델 훈련
07-1 인공 신경망
✅입력층 : 픽셀값 자체
✅뉴런(유닛) : z값을 계산하는 단위
✅출력층 : 계산한 z값을 바탕으로 클래스 예측
인공 신경망은 기본적으로 이렇게 이루어져 잇대여.
이제 모델을 만듭시다.
인공 신경망에서는 교차 검증 대신 검증 세트를 사용하기 때문에
훈련 데이터, 검증 데이터로 나누어 줍니다
그리고 가장 기본적으로 dense 층을 만드러요.
dense층은 다 연결 되어 있기 때문에 fully connected layer라고 합니다.
뉴런 개수는 10개, 소프트맥스로 활성화 하도록 설정 햇어염✌️
활성화 함수로 많이 사용하는건 보통 시그모이드, 소프트맥스, ReLU, 하이퍼볼릭 탄젠트 함수 정도..?
그리고 sequential()을 사용해서 설정한대로 모델을 만드러요.
와. 인공 신경망 모델 만들기 세상에서 제일 쉽다.
훈련 전에 마지막으로 compile()을 사용해서 손실함수를 설정해 줍니당.
sparse_categorical_crossentropy는 정수로된 타깃값을 사용해 손실을 계산하는 것이래요.
원-핫 인코딩된 타깃값을 사용하려면 그냥 categorical_crossentropy로 지정하면 됩니다.
원-핫 인코딩은 특정 클래스만 1, 나머지 값은 모두 0으로 표시를 하는 방식입니다.
보통 자연어 처리하는 모델에서 본 것 같규.. 전처리 과정에서 많이 사용합니닷.
metrics로 지정한 건 에포크마다 정확도를 출력하도록 설정한겁니다.
훈련은 fit()함수에 입력, 타깃, 그리고 에포크 수를 전달해주면 돼여
전 정확도 0.8537정도가 나왓네여.
모델 성능 평가는 evaluate()를 사용한다고 하네요.
검증 점수가 0.8462정도 나왓어염✌️
07-2 심층 신경망
이젠 층을 좀 많이많이 늘려가꼬. 딥.러닝이라는 것을 해봅시다.
딥러닝 모델을 보면 보통 입력층과 출력층 사이에 층이 많이 있는데,
그 층을 은닉층(hidden layer)라고 합니다.
왜냐면 그 사이의 과정을 인간이 알 수 없어요.. 봐도 해석이 안됩니다.
모델만이 아는거예요..
이번에는 2개의 층을 만들거니까 덴스도 2개 설정을 해줍니다.
첫 번째 층은 100개의 뉴런, 시그모이드로 활성화,
두 번째 층은 10개의 뉴런, 소프트맥스로 활성화 함수를 설정햇듀요
그리고 sequential에 덴스 두 개를 묶어서 전달할게요.
그럼 층이 2개인 모델 완성~~~
와하하 쉽다 쉬워 껌이네~~
층을 추가하는 또다른 방법이 잇대요.
그냥 바로 만들면서 추가하는 방식이네요.
추가로 이름도 설정을 햇네요👍
하지만 개인적으로 이게 더 보기 편한 것 같아염.
add로 추가하기!!
그리고 학습을 해주엇는데요.
층을 늘렷더니 정확도도 0.8759로 높아진걸 볼 수가 있었어요.
다음으로는 flatten층을 하나 추가햇어요.
flatten층은 데이터를 1차원으로 펼쳐주는 역할을 합니다.
그리고 첫 덴스층을 보면 활성화 함수로 렐루가 설정되어있는 것을 볼 수 있습니다.
렐루는 이렇게 생겻어요. 이게 뭔가 싶겟지만 정말 많이 쓰이더라고요.
그래서 다시 훈련시켜 봣습니다.
정확도가 0.8860이 나왓어요.
검증 점수도 0.8658으로 나쁘지 않습니다.
다음으로 옵티마이저에 대한 내용이 있는데..
솔직히 뭔지 잘 몰루겟떠염
그래서 찾아보니 더 나은 성능을 내도록 모델을 업데이트하는 과정을 담당한다규 합니다.
07-3 신경망 모델 훈련
손실 곡선
모델을 훈련시켰을 때 사실은 History 객체를 반환해주고 있었대요.
이 객체에는 손실과 정확도 값이 저장되어 있어서,
이걸 활용해서 손실과 정확도 그래프를 그려볼 수 있다고 합니다!
검증 손실
검증 손실을 계산하기 위해서는 fit()에 검증 데이터를 전달하면 됩니다.
그럼 또 반환된 history.history 딕셔너리에 검증 손실과 정확도가 들어있어요.
이를 그래프에 같이 나타내면 이러합니다.
흠... 과대적합이네요.
옵티마이저를 사용하면 과대적합이 크게 줄어드는 것을 볼 수 있습니다.
✅드롭아웃
드롭아웃은 훈련 과정에서 층의 일부 뉴런을 랜덤하게 0으로 만들어서 과대적합을 막는 방법
✅모델 저장과 복원
save_weights()를 사용해서 모델의 파라미터를 저장
또한 save()를 사용하면 모델 구조와 파라미터를 함께 저장
저장한 모델은 load_weights()로 파라미터를 불러오거나, load_model()으로 모델 전체를 불러올 수 있음
✅콜백
콜백은 특정 이벤트가 발생했을 때 실행되는 함수
fit()의 callbacks 매개변수에 리스트로 전달해서 사용
ModelCheckpoint : 에포크마다 모델 저장
EarlyStopping : 훈련 조기 종료
> patience로 설정한 만큼 검증 점수가 향상되지 않으면 훈련 중지
> restore_best_weights를 True로 지정하면 가장 낮은 검증 손실을 낸 모델 파라미터로 되돌림
기본 과제 : Ch.07-1 확인 문제
1. 어떤 인공 신경망의 입력 특성이 100개고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는 몇 개인가요?
가중치 개수 = 입력 특성 x 뉴런 개수 = 100 x 10 = 1000개편향 개수 = 각 뉴런에 편향이 1개씩 존재하므로 10개따라서 총 파라미터의 개수는 1000 + 10 => 1010개!
2. 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수의 어떤 활성화 함수를 지정해야 하나요?
이건 예전에 한거자나요~~~
이진분류는 sigmoid, 다중분류는 softmax!
3. 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?
케라스 모델은 훈련하기 전에 손실 함수를 설정해주는 과정이 필요했죠.
그 때 compile()을 사용했죠!
4. 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은 무엇인가요?
정수 레이블을 사용할 때 sparse_categorical_crossentropy로 지정했었죠!
원-핫 인코딩을 했을 땐 categorical_crossentropy를 설정했었습니다.
드디어 작년에 열심히 들엇던 전공 과목 내용이 등장하는데.
벌써 활동이 끗나버렷어.......
그래도 이제 완전 감자에서 좀 벗어난 느낌?!
나도 모델 만들고 학습시킬 수 잇다 이거야. 흠흠.
딥러닝도 계속 공부해봐야겟어요 🔥🔥
수고햇듀. 🫶
'Machine Learning' 카테고리의 다른 글
[혼공머신] 5주차_군집 알고리즘 / k-평균, 이너셔 / PCA (0) | 2025.02.16 |
---|---|
[혼공머신] 4주차_결정 트리 / 교차 검증 / 앙상블 기법 (0) | 2025.02.09 |
[혼공머신] 3주차_로지스틱 회귀, 시그모이드, 소프트맥스 / 확률적 경사 하강법 (1) | 2025.01.26 |
[혼공머신] 2주차_회귀 / 특성 공학 / 변환기(Transformer) (1) | 2025.01.19 |
[혼공머신] 1주차_훈련, 테스트 셋 / 데이터 전처리 (1) | 2025.01.07 |