일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Github
- Machine Learning
- C언어
- Rocky Linux
- 크롤링 개발
- 국가과제
- rnn
- 고등학생 대상
- Database
- Kubernetes
- Spring
- LINUX MASTER
- colab
- Spring Boot
- Resnet
- ChatGPT
- API
- suricata
- cloud
- Docker
- ICT멘토링
- git
- KAKAO
- 코딩도장
- Powershell
- GoogleDrive
- VSCode
- Python
- 인터넷의이해
- OSS
- Today
- Total
코딩두의 포트폴리오
OSS - 13_ 패션 아이템을 구분하는 DNN 본문
Fashion MNIST 데이터셋 알아보기
Fashin MNIST
28 x 28 픽셀 70,000개 흑백이미지
신발, 드레스, 가방 등 총 10가지 카테고리
torch & torchvision 모듈
실습예제
04-패션_아이템을_구분하는_DNN/fashion_mnist.ipynb
입력 이미지를 텐서로 변환하는 코드 설정
Fashion MNIST 데이터셋 가져오기
학습용, 성능 평가용으로 구분되어 있음
True - 학습 데이터
Flase - 테스트 데이터
traim 옵션만 다름
Fashion MNIST 데이터 일부를 출력해 보기
개별 이미지 꺼내보기
인공신경망으로 패션 아이템 분류하기
실습예제
04-패션_아이템을_구분하는_DNN/neural_network.ipynb
cuda가 설치되어 있는지? = GPU가 설치되어 있는지?
GPU o -> cuda
GPU x -> cpu
첫 런타임 시 CPU가 출력
런타임 유형을 GPU로 변경
cuda로 변경됨을 확인
이미지 분류 문제
이미지 분류를 위한 인공신경망 구현
입력 x 는 [배치크기, 색, 높이, 넓이]로 구성
– x.size()를 해보면 [64, 1, 28, 28]이라고 표시
– Fashion MNIST에서 이미지의 크기는 28 x 28, 색은 흑백으로 1 가지
입력 x의 총 특성값 갯수는 28 x 28 x 1, 즉 784개
레이어가 3개인 3층 인공신경망 구현
784 - 256 - 128 순으로 연결되면서 10개가 최종 출력
view: 1차원 행렬로 표현
학습 데이터가 주어지고, 위에서 정의한 모델 사용
성능 측정하기
하이퍼 파라미터(hyper parameter)
– 신경망 모델 층의 종류와 크기, 배치 크기, 학습률 등 사용자가 직접 지정해주는 값들
일반적인 머신러닝 데이터셋 구분
– 학습 데이터 : 가중치 조절
– 검증(확인) 데이터 : 배치 크기와 모델 설계와 같은 하이퍼 파라미터 조절
– 테스트(시험) 데이터 : 성능 보고
Fashion MNIST 데이터셋은 규모가 작아서 학습과 테스트 데이터로만 구분
평가하기 위한 함수 정의
학습을 하는게 아니라서 기울기 계산이 여기서는 필요 X
epoch마다 학습과 테스트셋을 이용한 검증을 반복하고 결과를 출력
과적합과 드롭아웃
과적합(overfitting)
- 학습 성능은 좋은데, 테스트셋이나 실제 상황에서 성능이 나쁜 경우
- 학습 데이터에만 치중되어 유연성이 부족한 상태
- 새로운 데이터에 대한 성능이 잘 나오지 않는 상태
- 즉, 예를 들어 원리에 대한 이해 없이 연습문제만 외운 경우
과소적합(underfitting)
- 학습을 제대로 진행하지 않은 상황
- 과적합의 반대 상황
일반화(generalization)
- 학습 데이터와 실제 데이터에서 모두 좋은 성능을 내는 상태
- 과소적합과 과적합의 중간
과적합을 어떻게 알 수 있을까?
- 데이터셋을 학습, 검증, 테스트셋으로 나누고,
- 학습하다가 검증 데이터셋에 대한 성능이 나빠지기 시작하기 직전이 가장 적합한 모델
신경망 학습을 할수록 정확률이 더 올라가는 것을 확인
반복할수록 오차가 점점 줄어듦
과적합 되었다고 보기는 어려움
과적합 해결방법(1)
데이터 늘리기(data augmentation)
- 모든 종류의 데이터를 확보하는 것은 불가능하므로,
- 이미 가진 데이터를 이용하여 일부분을 자르거나, 돌리고, 노이즈를 더하고, 색상을 변경하는 등 유사 데이터를 늘림
- 예제에서는 오른쪽과 왼쪽을 뒤집는 대칭이동 전략을 적용해보자.
과적합 해결방법(2)
드롭아웃(dropout)
- 학습 진행 과정에서 신경망의 일부를 사용하지 않은 방법
- 예) 50% 드롭아웃(신경망 중 학습 시 일부분만 사용)은 학습 단계마다 절반의 뉴런만 사용 - 검증과 테스트 단계에서는 모든 뉴런 사용
실습예제
04-패션_아이템을_구분하는_DNN/overfitting_and_regularization.ipynb
- 데이터셋에 노이즈를 추가하거나 모델에 드롭아웃을 적용하면 학습하는데 시간이 많이 걸림
- 그래서 epoch 수를 늘려서 학습
- 정확도가 높게 시작해서 꾸준히 증가하는 것을 볼 수 있음
랜덤플림 활용해서 데이터 개수 늘림
개선된 코드
'Open Source Software' 카테고리의 다른 글
OSS - 15_ 이미지 처리 능력이 탁월한 CNN (0) | 2024.05.25 |
---|---|
OSS - 14_ ChatGPT & Transformers 라이브러리 활용 (0) | 2024.05.24 |
OSS - 12_ 파이토치로 구현하는 ANN (0) | 2024.05.11 |
OSS - 11_ AI-NLP 개요 (0) | 2024.05.11 |
OSS - 10_CoLab 사용하기 (0) | 2024.05.11 |