일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 항해학부
- 청년빅데이터캠퍼스
- 머신러닝
- 충청남도 청년네트워크 위원회
- 현대중공업빅데이터경진대회
- 해양수산빅데이터활용공모전
- 펭귄몸무게예측대회
- 데이콘
- 해양빅데이터
- 유니스트
- 딥러닝
- 해사법
- 여수광양빅데이터경진대회
- 항해사
- 해양수산빅데이터경진대회
- 조선빅데이터
- HSK
- 해양수산부
- AI
- 선박직원법
- 빅데이터
- 한국해양대학교
- fastai
- 여수광양항
- 빅데이터경진대회
- YGPA 공공데이터 활용 비즈니스 공모전
- 해상교통법
- 해양수산빅데이터
- 선원법
- 인생
- Today
- Total
경 탁
[Fast ai와 파이토치가 만나 꽃피운 딥러닝] #2 본문
본 포스팅은 FAST-AI의 코드에 관한 부분을 중점적으로 다룹니다.
본 포스팅에서 다룰 내용은 4장 MNIST 분류기에 관한 내용입니다.
이 분야에서는 워낙 많이 쓰이는 데이터이기도 하고, 그래서 이미 많은 분들이 아실거라고 생각합니다.
이 책에서 밑바닥부터 다룬 부분이기도해서 내용이 살짝 난해하고 많긴 하지만 여러번 공부하고 정리하면 이해가 될듯 싶습니다.
1. 서론 및 문제제기
path = untar_data(URLs.MNIST_SAMPLE)
path.ls()
threes = (path/'train'/'3').ls().sorted()
sevens = (path/'train'/'7').ls().sorted()
일단 MNIST 데이터를 다운받아줍니다.
.ls() 는 그 폴더에 어떤 파일이 들어있는지 판단해주는 것입니다.
여기서 threes 및 sevens 에 train 폴더의 3 이미지 및 7 이미지를 정의해줍니다.
im3_path = threes[1]
im3 = Image.open(im3_path)
im3
임의로 im3_path라는 이름의 threes의 첫번째 파일을 정의해줍니다.
여기서 Image.open()을 쓰게되면 그 이미지를 보여줍니다.
im3_t = array(im3)
df = pd.DataFrame(im3_t)
df.style.set_properties(**{'font-size':'6pt'}).background_gradient('Greys')
한술 더떠서 array 혹은 tensor로 이미지를 변환한뒤, dataframe으로 변환시켜줍니다.
가장 아래있는 코드는 프레임을 폰트사이즈 6pt로 회색으로 칠하게 해주는 코드입니다.
'Greys'외에 'Blues'라던가 'Reds' 등으로도 설정 가능합니다.
위에놈은 7입니다.
그럼 여기서 핵심은 '3과 7을 어떻게 해야 잘 구별할 수 있을 것인가 ?' 입니다.
어떻게 해야 3과 7을 야무지게 구별할 수 있을까요 ? ~^^
2. 일단 픽셀값들 비교해보기
seven_tensors = [tensor(Image.open(s)) for s in sevens]
three_tensors = [tensor(Image.open(o)) for o in threes]
stacked_sevens = torch.stack(seven_tensors).float()/255
stacked_threes = torch.stack(three_tensors).float()/255
mean3 = stacked_threes.mean(0)
mean7 = stacked_sevens.mean(0)
show_image(mean3)
show_image(mean7)
7 이미지 파일들을 텐서로 불러옵니다. (3도 마찬가지)
이후 tensor들을 stack해줍니다.
즉 3 이미지들과 7 이미지들을 저렇게 모아준다는 것입니다.
mean3 및 mean7은 각 픽셀값의 평균치, 즉 이상적인 3과 7을 만들어줍니다.
마지막 show_image는 이상적인 3과 7의 이미지를 보여줍니다.
2.1 픽셀값들의 차이 계산
dist_3_abs = (a_3 - mean3).abs().mean()
dist_3_sqr = ((a_3 - mean3)**2).mean().sqrt()
dist_3_abs, dist_3_sqr
dist_7_abs = (a_3 - mean7).abs().mean()
dist_7_sqr = ((a_3 - mean7)**2).mean().sqrt()
dist_7_abs, dist_7_sqr
픽셀값들을 계산하였고, 또 이상적인 3과 7을 만들었으니
임의적인 3을 통해 픽셀값들의 차이를 계산해보겠습니다.
여기서 쓰이는 픽셀값들의 차이를 계산하는 방법이 2가지가 있습니다.
-MAD(평균절대차-L1노름) -RMSE(평균제곱근오차-L2노름) 입니다.
상식적으로 생각해봤을때 L2 노름은 L1 노름보다 오차에 더 큰 페널티를 부여한다고 생각할 수 있습니다.
(왜냐면 제곱을 하기 때문이죠 :-) ! 그후에 제곱근을 씌우긴 합니다.)
어쨋든 본론으로 넘어와서
저희가 임의적으로 정해준 3과 이상적인 3의 차이
그리고 3과 이상적인 7의 차이... 두개의 차이가 보이시나요 ?
7과의 차이가 더 큰 것을 파악할 수 있습니다 !
나쁘지 않은 아이디어였던 것 같네요 ~ +_+
다음 포스팅에서 또 찾아뵙겠습니다 ~
'- 공부 > 2. AI' 카테고리의 다른 글
[Fast ai와 파이토치가 만나 꽃피운 딥러닝] #4 (0) | 2022.01.15 |
---|---|
[Fast ai와 파이토치가 만나 꽃피운 딥러닝] #3 (0) | 2022.01.11 |
[Fast ai와 파이토치가 만나 꽃피운 딥러닝] #1 (0) | 2022.01.02 |
[데이콘] 펭귄 몸무게 예측 경진대회 #3 (0) | 2021.12.31 |
[데이콘] 펭귄 몸무게 예측 경진대회 #2 (0) | 2021.12.29 |