일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 청년빅데이터캠퍼스
- 빅데이터
- 빅데이터경진대회
- 인생
- 선박직원법
- 한국해양대학교
- 해사법
- 유니스트
- 데이콘
- 해양수산부
- AI
- HSK
- 충청남도 청년네트워크 위원회
- 해양수산빅데이터
- 항해사
- 항해학부
- 해양수산빅데이터활용공모전
- 현대중공업빅데이터경진대회
- 해양빅데이터
- 조선빅데이터
- 펭귄몸무게예측대회
- 머신러닝
- fastai
- 딥러닝
- 해상교통법
- YGPA 공공데이터 활용 비즈니스 공모전
- 여수광양빅데이터경진대회
- 여수광양항
- 해양수산빅데이터경진대회
- 선원법
- Today
- Total
경 탁
[Fast ai와 파이토치가 만나 꽃피운 딥러닝] #1 본문
본 포스팅은 한빛미디어에서 나온 fastai & pytorch가 만나 꽃피운 딥러닝에 대한 책에 대해 다룹니다.
예전에 사이킷런으로 머신러닝을 공부하다가 PYCARET을 알고 나서 충격 먹었던 기억이 납니다.
점점 갈수록 낮아지는 M/L의 진입장벽, 그때 들었던 생각은 딥러닝에 대한 이런 자동화 라이브러리는 없겠지하는 생각이었습니다.
승선 중 우연히 공부에 대한 자극을 받고자 책을 찾았는데 , 그때 찾았던 도서가 바로 이 책입니다.
딥러닝에 대한 자동화 라이브러리도 벌써 시중에 나왔구나 하는 충격과 함께 공부하리라 다짐했었는데,
선박이라는 고립된 환경, 잘안되는 인터넷 때문에 공부하다가 말았던 기억이 납니다.
잡소리는 이쯤하고 앞으로 본 서적에 대한 공부와 함께 코드 그리고 문제점 & 해결점을 포스팅할까 합니다.
(주로 코드 위주)
- 코드 설명
1.
from fastai.vision.all import *
path = untar_data(URLs.PETS)/'images'
1. fastai.vision에 속해있는 모든 라이브러리를 가져옵니다.
2. fast.ai의 데이터 컬렉션에서 데이터셋을 서버에서 다운로드후 , 압축을 해제합니다. 그리고 그 추출된 위치를 PATH라는 객체로 반환합니다.
2.
def is_cat(x) : return x[0].isupper()
dls = ImageDataLoaders.from_name_func(
path, get_image_files(path), valid_pct=0.2, seed=42,
label_func=is_cat, item_tfms=Resize(224))
1. 데이터셋에 포함된 파일명의 규치에 따라 고양이 레이블을 지정하는 is_cat 함수를 정의 // x[0]에서 대문자 판단
2. 이 함수를 통해 fastai에 데이터셋의 종류와 구조화방법을 알려줍니다. (dls)
각각 기능이 궁금하시면 함수 뒤에 (ALT+TAB) 을 누르시면 기능을 알 수 있습니다.
위에서 알 수 있다싶이, 경로지정(PATH)/라벨 지정방식(IS_CAT함수)/ 그외 변형을 할 수 있습니다.
valid_pct : 데이터의 20%는 모델학습에 사용하지 않기. 즉 20%의 데이터를 VALID data set // 나머지 80%를 Train data set으로 두라는 것입니다. -> 과적합 방지 Seed : 코드 실행시 도일한 임의성으로 검증용 데이터셋을 구성하도록 하는 것 -> 아무 숫자나 상관없습니다.
데이터셋 변형에는 두가지 종류가 있는 데, item과 batch이다.
item_tfms : 개별 데이터에 적용할 변형 (가령 위 예시는 각 이미지를 224 * 224의 픽셀로 조정)
batch_tfms : 데이터 배치(뭉치)에 대해 GPU가 빠르게 한번에 처리할 변형
쉽게 생각해 식빵을 1개씩 굽기 보다는 5개씩 굽는거라고 생각하시면 됩니다.
3.
learn = cnn_learner(dls, resnet34, metrics=error_rate)
learn.fine_tune(1)
합성곱 신경망(CNN)을 생성하고, 이때 사용될 데이터셋과 아키텍처(RESNET34) 그리고 평가지표를 지정합니다.
RESNET34는 CNN의 모델 중 하나로 구조에 있는 계층의 수를 나타냅니다.
대략적으로 숫자가 높아질수록 학습에 더 오랜시간이 걸리고 과적합이 된다고 합니다.
하지만 데이터의 수가 많다면, 더 정확한 결과를 얻을 수 있다고 합니다.
그외에 평가지표는 검증용 데이터셋을 사용해 예측의 품질을 측정하는 함수로, 보통 매 에포크의 마지막에 출력됩니다.
검증용 데이터셋 중 잘못 분류된 이미지의 비율을 알려줍니다.
많이들 아시는 정확도(accuracy)는 1.0-error_rate입니다.
그리고 모델을 적합시킵니다.
우리는 벌써 resnet34로 시작했기 때문에 fit이 아닌 fine_tune(미세조정) 을 사용하면 됩니다.
쯕 fine_tune은 사전 학습된 모델을 새로운 데이터셋에 적응시키는 방법 중 하나입니다.
=> 추가 에포크 동안 사전 학습된 모델의 파라미터를 갱신하는 학습기법
=> 에포크 : 데이터셋 전체를 한번 통과시켰다는 의미
4.
from fastbook import *
uploader = widgets.FileUpload()
uploader
img = PILImage.create(uploader.data[0])
is_cat,_,probs = learn.predict(img)
print(f"Is this a cat?: {is_cat}.")
print(f"Probability it's a cat: {probs[1].item():.6f}")
그 외 위 두개 코드는 업로드를 만들어 동물 사진을 업로드하면 고양이인지 판단을 해줍니다.
직접 이미지를 다운받으셔서 업로드하시면 저희가 만든 RESNET 모델이 판단하여 고양이인지 아닌지 판단해줍니다.
'- 공부 > 2. AI' 카테고리의 다른 글
[Fast ai와 파이토치가 만나 꽃피운 딥러닝] #3 (0) | 2022.01.11 |
---|---|
[Fast ai와 파이토치가 만나 꽃피운 딥러닝] #2 (0) | 2022.01.10 |
[데이콘] 펭귄 몸무게 예측 경진대회 #3 (0) | 2021.12.31 |
[데이콘] 펭귄 몸무게 예측 경진대회 #2 (0) | 2021.12.29 |
[데이콘] 펭귄 몸무게 예측 경진대회 (0) | 2021.12.29 |