machine learning을 위해서는 dataset을 train/val/test set으로 분할할 필요가 있다.

 

이유는 cs231n 강의 초반에 자세하게 나오지만,

 

간략하게 정리하면

 

training의 평가를 위함이다.

 

generization이 잘되야 좋은 model이라고 볼 수 있다.

 

본인은 보통 train/val/test의 비율을 75/15/10으로 분할한다.

 

그리고 class imbalance를 피하기위해 각 class별 data 비율도 중요하고

 

또 하나는 random으로 sampling을 해야한다는 것이다.

 

기존에는 dataset을 하나의 폴더에 모아놓고

 

powershell 명령어를 통해 분할했었다.

Get-ChildItem SomeFolder | Get-Random -Count $x | Move-Item -Destination SomeOtherFolder

SomeFolder가 dataset 폴더가 되고 $x에 빼내려는 이미지 개수, SomeOtherFolder가 val or test 폴더를 지정해서 분할했었다.

 

단점은 전체 이미지의 개수를 이용해서 비율대로 개수를 계산해서 수행해야한다는 것이다.

 

예를 들어, 전체 dataset이 1,000 장이면, val를 15%로 설정할 시에는 150을 $x에 계산해서 넣어줘야한다.

 

처음에 이런 식으로 진행했다가 최근 검색을 통해 손쉬운 방법을 찾았다.

 

python library를 활용하는 것이다. (파이선 짱짱맨)

pip install split-folders

일단 설치한다.

import splitfolders
splitfolders.ratio('input folder', output="output folder", seed=1337, ratio=(0.75, 0.15, 0.1))

'Data' 에는 전체 이미지가 모아져있는 폴더를 지정한다.

 

'output' 에는 출력 폴더를 지정한다.

 

위의 코드를 실행시키면 출력 폴더에 train/val/test folder가 생성된다.


2020-11-30 추가

쓸일이 있어서 해보니까 안되서

 

왜 안되나 도큐먼트 찾아보니까

 

input 폴더에 class 폴더가 또 있어야 된다(...)

 

그래서 그냥 폴더 하나 만들어서 split 하고

 

파일 옮기는걸로 했다.

 

그래도 편하긴 하네!

+ Recent posts