이제는 사용하지 않는 공부방/Artificial intelligence

fastai vision tutorial/classifying breeds

환상상상속상 2021. 1. 14. 17:50

반드시 runtime에서 gpu로 바꿔줘야한다!!

 

1. path = untar_data(URLs.PETS)

 

외부로부터 다운받아 압축한 아카이브의 위치를 가지고 온다.

 

2.path.ls()

 

정보를 알 수 있다.



3. files = get_image_files(path/"images")

 

이미지파일을 가져온다.

 

4. def label_func(f): return f[0].isupper()

 

대문자가 고양이를 뜻하므로 고양이를 판별하는 함수를 만들어주자.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

5.  files[0].name

파일의 이름이 어떤 식으로 되어있지?

 

6.pat = r'^(.*)_\d+.jpg'

파이썬의 정규표현식을 사용하여 쉽게 이름을 바꾸고자한다. 하지만 난 공부안할거임!

cupjoo.tistory.com/84

 

7.dls = ImageDataLoaders.from_name_re(path,files,pat,item_tfms = Resize(224))

이전과 달라진 게 있다면, from_name_re와 pat이다.

정규표현식을 통하여 라벨링하는 함수다.

--> 보통 파일명에 정답이 주어져있다.

 

8.dls.show_batch()

데이터를 보고.

 

9. dls = ImageDataLoaders(path,files,pat,item_tfms = Resize(460), batch_tfms = aug_transforms(size = 224))

 

이전과 달리 여러 종을 구분하기때문에 data augmentation을 추가하였다.

(여러 종을 구분해야해서 더 어려운 문제다)

*data augmentation은 원본 이미지에 인위적인 변화를 주는 것이다. 이를 통해 학습에 활용될 수 있는 데이터가 된다.

기존의 데이터의 정보를 보존하면서 약간의 노이즈를 추가하여 강력한 고유의 특징을 느슨하게 만들어줌으로써 오버피팅을 막아줄 수 있다.

 

궁금증. transform에 대한 정보가 더 있으면 좋겠다.

 

10. learn = cnn_learner(dls, resnet34, metric = error_rate)

 

11. learn.lr_find()

이전에는 기본 런닝 레이트를 사용했다. 이번에는 가장 좋은 런닝 레이트를 찾아보자.

 

12. learn.fine_tune(2, 3e-3)


[learning_rate를 이것을 사용한 이유는 여기 링크에서 알아보자]

e-1인데 loss가 굉장히 작다는 것은 learning rate가 비교적 큰 것에 비해서 loss가 굉장히 작으므로 발산하게된다.

관련 링크: stackoverflow.com/questions/61172627/choosing-the-learning-rate-using-fastais-learn-lr-find

관련 문서: arxiv.org/abs/1803.09820 

 

런닝레이트가 크다보니 발산하여 결과가 안좋아진 것을 확인할 수 있다.

 

13.learn.show_results()

 

14.interp = interpretation.from_learner(learn)

interp.plot_top_losses(9,figsize = (15,10))

 

모델이 잘못 예측한 것들만 보여준다.

prediction/ acutal/ loss/ probability 순서로 보여준다.

 

[정리]

데이터를 모으고 확인한 후에 learner객체를 만들고, 모델을 학습시키고 예측한다.