2024. 5. 18. 00:50ㆍ공부 정리
mnist 데이터를 가지고 어떻게 공부할 수 있을까 고민하다가 tf사이트에 공개된 초보자 버전, 전문가 버전과 학교에서 했던 세 가지를 비교해서 어떤 차이가 있는지 분석해 이 세가지를 녹여낸 내 버전을 만드는 것이 도움되겠다는 생각이 들었다. 이게 내 플젝일 수 있을지는 모르겠다. 내가 구상하고 만들어야 내 플젝인데 웹 개발 코드와는 다르게 데이터와 모델 다 정해져있고 자율성이 적기때문에 자기만의 특징을 드러내기 힘들다. 그래도 내가 보기 편하게 조합해내서 내 것 화 하려고 한다. 확실히 웹과는 다르게 코드 안에 있는 논리와 알고리즘, 아키텍처가 더 중요하다. 어떻게 그런 결론이 나왔는지 통계학적 지식과 수학적 지식을 이용해서 설명한다. 아직은 이런 프로세스가 낯설긴 하다.
초보자:
버전 > 불러와 밝기로 나누기 > 모델링 > 요약 > 모델 컴파일 > png > 예측 > softmax화 > 손실함수 > 손실 컴파일 > 학습 자동적합(fit) > 테스트 평가 > softmax로 가능성모델 생성 > 테스터로 해당모델 확인
전문가:
버전 > 불러와 밝기로 나누기 > 차원 추가 > 데이터 섞고 배치 정하기 > 모델 클래스로 함수화 > 손실함수 방식, 옵티 지정 > 손실방식, 정확도방식 mean, sparse > 어노테이션 붙여 함수화_학습 수동적합(GradientTape) > 어노테이션 붙여 함수화_테스트 > 반복문 돌려서 한번에 학습과 테스트 끝냄.
학교:
버전 > 불러와 밝기로 나누기 > 이미지 불러오기 테스트 > 형태, 갯수 확인 > 모델링 > 모델 요약 > png > 모델 컴파일 > 학습 자동적합(fit) > 평가(정확도 평가) > 에포크간 정확도 시각화
몰랐던 코드들:
tf.newaxis - 컬럼 추가(dt.reshape(n,n,n...)으로도 추가 가능)
@tf.fucntion - 어노테이션을 사용한 함수가 클래스보다 반응속도가 빠르다.
gradient() - 전후 차이값을 돌려주는 함수인데 1과 3, 2와 4처럼 하나 띄고 합해서 분모로 나눠준다. (도큐먼트보다 아래 설명이 더 정확)
https://stackoverflow.com/questions/24633618/what-does-numpy-gradient-do
gradientTape() vs fit() - 그래디언츠와 옵티마이저 수동, 자동 세팅 차이
* flatten()은 값을 하나로 만들어주는 함수라는건 아는데 그 값이 어떻게 나오는지 찾아봤다. (n_samples, height*width*channels)
pooling은 shape를 유지한다.
* 보통 train, test 둘로 나누는 데 validation도 중간에 들어갈 수 있다. 학습 구간 사이 k-fold 로 나누어 평가구간 랜덤 지정 -> 학습이 잘 되었는지 판단. 이 후 테스트 데이터로 검사.
mnist를 사용한 논문과 같이 읽으면 공부에 도움이 될 것 같아서 하나 정해보았다.
아래 논문은 일반적인 모델과 개선 모델을 비교하여 최대 99.8%의 정확도를 구현해낸다. 3개는 풀링이 있는 일반적인 형태, 3개는 풀링이 없는 형태이며, 전자의 경우 합성곱과 풀링의 배치로, 후자의 경우 커널사이즈와 합성곱층의 수로 차이를 주었다.
코드를 보면 나처럼 코랩으로 한 페이지에 다 넣기보단 파일을 쪼개 빠르게 각각 불러오는 형태로 만들었고 쿠다, 지피유를 사용해 속도를 높혔다. 나도 좀 익숙해지면 내 컴퓨터에, 혹은 클라우드에 세팅하는게 좋겠다는 생각이 들었다. 코랩에라도 한 번 적용해보려고 헀었는데 토치로 만들어서 어렵더라. 웹개발에서도 마이그레이션은 까다로운거니까 그럴수있다고 생각은 하는데 아쉽다.
여튼, 클라우드 서버는 돈이 들기때문에 제대로 만들어야할 것 같은데 아직 그정도는 안된다. 컴퓨터에서 돌리기 힘들면 클라우드로 옮기면 되니까 우선은 컴퓨터에 세팅해보아야겠다. 주피터면 되려나. 아니면 파이참으로 해야하나 아니면 vsc면 되려나 감이 안온다. 편한건 vsc니까 그걸로 틀 만들고 세팅해보려고. 가격은 얼마나 되려나 데이터 돌리는거니까 비쌀텐데.
https://arxiv.org/abs/2008.10400
AN ENSEMBLE OF SIMPLE CONVOLUTIONAL NEURAL NETWORK MODELS FOR MNIST DIGIT RECOGNITION
Sanghyeon An Minjun Lee Sanglee Park Heerin Yang Jungmin So
Department of Computer Science and Engineering Sogang University
형태:
요약 > 소개 > 모델설명 > 실험(개별결과/네트워크구조 영향/데이터증강 영향/배치정규화 영향) > 결론
요약 -> 키워드 -> mnist 소개 -> 구성한 모델들 설명 -> 구성 모델들의 정확도 측정 및 비교(모델구조, plot, 5수요약, distplot) -> 비교집단 cnn 모델들 정확도 측정 및 비교(모델구조, plot, 5수요약, distplot) -> 파라메터별 영향 비교 -> 구성모델의 우수성 입증
'공부 정리' 카테고리의 다른 글
바이오 통계학 w/R (1) | 2024.10.02 |
---|---|
Udemy: Cv in python for beginners 정리 (0) | 2024.09.28 |
5. Transfer learning based on MobileNet w/ cats-and-dogs-data (1) | 2024.06.30 |
4. ImageNet으로 꽃 분류 with flower_photos (0) | 2024.06.16 |
git 이해하기 위한 정리 (0) | 2022.08.30 |