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 하고
파일 옮기는걸로 했다.
그래도 편하긴 하네!
'머신러닝 > Deep Learning' 카테고리의 다른 글
Pycharm Pro를 활용한 SSH interpreter (0) | 2020.11.23 |
---|---|
Ubuntu 18.04 / cuda 10.1 / cuDNN 7.6.5 / anaconda / pytorch 세팅 (0) | 2020.11.23 |
R-CNN(Regions with CNN features), SPPNet(Spatial Pyramid Pooling in Deep CNN) (0) | 2020.09.16 |