일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 재귀함수
- AIFFEL
- 카카오
- TensorFlow
- Python
- 파이썬코딩도장
- 데이터사이언티스트
- 함수
- 자연어처리
- NLP
- 딕셔너리
- 제로베이스 데이터사이언스
- 파이썬
- 제어문
- Set
- 후기
- 사이킷런
- 속성
- 추천시스템
- 클래스
- AI
- 코딩도장
- 아이펠
- 딥러닝
- 데이터사이언스 스쿨
- 스크랩
- numpy
- 기사
- 머신러닝
- 데이터분석
- Today
- Total
뮤트 개발일지
AIFFEL 아이펠 7일차 본문
딥러딩: 데이터 준비 -> 딥러닝 네트워크 설계 -> 학습 -> 테스트(평가)
데이터 준비
MNIST 숫자 손글씨 Datase 불러들이기
텐서플로우의 표준 API인 tf.keras의 Sequential API를 이용해 숫자 손글씨 인식기를 만들 것
http://yann.lecun.com/exdb/mnist/
MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges
yann.lecun.com
MNIST 데이터셋의 X항목: 이미지 데이터를 담은 행렬matrix
Y항목: X항목에 들어있는 이미지에 대응하는 실제 숫자 값이 담겨져 있음(답)
*Matplotlib: 파이썬에서 제공하는 시각화 패키지. 차트, 플롯 등 다양한 형태로 데이터를 시각화할 수 있다.
학습용데이터와 시험용 데이터
학습용 데이터로 학습을 한 후 학습이 끝나고 시험용 데이터로 테스를 진행한다.
MNIST 데이터셋은 250여 명의 데이터를 학습용으로, 다른 250여 명의 데이터를 시험용으로 사용한다.
print(x_train.shape)
===> 28*28 크기의 사진이 60000장 존재한다는 뜻
Train set: 모델을 학습하기 위한 데이터 셋
Validation set: 학습이 이미 완료된 모델을 검증하기 위한 데이터셋, 학습에 참여하지는 않지만 '관여'한다.
Test set: 학습과 검증이 완료된 모델의 성능을 평가하기 위한 데이터셋
일반적으로 Train : Validation : Test = 6 : 2 : 2로 이용한다.
* epoch: 인공 신경망에서 전체 데이터 셋에 대해 forward pass/backward pass 과정을 거진 것. 즉, 전체 데이터 셋에 대해 한 번 학습을 완료한 상태. epoch=40은 전체 데이터를 40번 사용해서 학습을 거치는 것
* overfitting과적합: 학습 데이터에 대해 과하게 학습하여 실제 데이터에 대한 오차가 증가하는 현상
예) 노란색 고양이를 보며 고양이 특성을 학습한 사람이 검은색이나 흰색 고양이를 보고는 고양이라고 인식하지 못하는 현상
* cross validation교차검증: tran set을 train set + validatio set으로 분리한 뒤, validation set을 사용해 검증하는 방식
- 장점: 모든 데이터셋을 훈련에 활용하여 정확도를 향상시킬 수 있고, 데이터 부족으로 인한 underfitting을 방지할 수 있다. 또한 모든 데이터셋을 평가에 활용하여 평가에 사용되는 데이터 편중을 막을 수 있다. 평가 결과에 따라 좀 더 일반화된 모델을 만들 수 있다.
- 단점: literation 횟수가 많기 때문에, 모델 훈련/평가 시간이 오래 걸린다.
인공지능 모델을 훈련시키고 사용할 때, 일반적으로 입력은 0~1 사이의 값으로 정규화 시켜준다. MNIST 데이터는 각 픽셀의 값이 0~255 사이에 있으므로 데이터들을 255.0으로 나눠준다.
딥러닝 네트워크 설계하기
Sequential Model
- Conv2D: 첫 번째 인자 = 사용하는 이미지 특징의 수, 위의 사진에서는 16과 32사용. 먼저 16개의 이미지 특징을, 그 뒤에 32개 이미지 특징을 고려하겠다는 의미. 복잡한 영상일 수록 특징 숫자를 늘려줄 수 있다.
- Dense: 첫 번째 인자 = 분류기에 사용되는 뉴런의 숫자. 값이 클수록 복잡한 분류기를 만들 수 있음. 결과적으로 분류해 내야 하는 클래스 수로 지정하면 된다. 숫자 인식기에는 10, 알파벳 인식기에서는 52가 된다.
model.summary(): 만든 딥러닝 네트워크 모델을 확인하는 메서드
딥러닝 네트워크 학습시키기
print("Before Reshape - x_train_norm shape: {}".format(x_train_norm.shape))
print("Before Reshape - x_test_norm shape: {}".format(x_test_norm.shape))
x_train_reshaped=x_train_norm.reshape( -1, 28, 28, 1) # 데이터갯수에 -1을 쓰면 reshape시 자동계산됩니다.
x_test_reshaped=x_test_norm.reshape( -1, 28, 28, 1)
print("After Reshape - x_train_reshaped shape: {}".format(x_train_reshaped.shape))
print("After Reshape - x_test_reshaped shape: {}".format(x_test_reshaped.shape))
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train_reshaped, y_train, epochs=10)
테스트 데이터로 성능 확인
model.prdict(): model이 입력값을 보고 실제로 추론한 확률분포를 출력
model의 추론결과를 시각화해서 보면 향후 model 성능 개선에 도움이 된다.
더 좋은 네트워크 만들기
딥러닝 네트워크의 구조 자체를 바꾸지 않으면서 해볼 수 있는것
Conv2D 레이어에서 입력 이미지의 특징 수를 늘리거나 줄여보는 것, Dense 레이어에서 뉴런수를 바꾸는 것, epoch 값 변경하기
https://github.com/pjk7565/rock_scissor_paper
GitHub - pjk7565/rock_scissor_paper
Contribute to pjk7565/rock_scissor_paper development by creating an account on GitHub.
github.com
가위바위보 분류기를 만들어보았는데 이해가 안 된 상태로 하려니 막막했다ㅜ
그래도 조원분들이 감사하게도 도와주셔서 어찌어찌 마무리..! 정확도는 30%밖에 안 나왔지만 왜 그런지도 알았고, 내가 할 수 있는 최선은 다한 것 같아 제출하기로 했다. (별 수집가가 되고 싶었는데ㅠ)
점점 어려워지는데 밀리지 않도록 열심히 해야겠다. (지금 시간 새벽 5시 반..)
'AIFFEL' 카테고리의 다른 글
AIFFEL 아이펠 8일차 (0) | 2022.01.05 |
---|---|
AIFFEL 아이펠 다양한 데이터 전처리 기법 (0) | 2022.01.05 |
AIFFEL 아이펠 6일차 (0) | 2022.01.03 |
AIFFEL 아이펠 파이썬으로 코딩 시작하기 (0) | 2022.01.03 |
AIFFEL 아이펠 5일차 (0) | 2021.12.31 |