이미지를 분류하기 위한 딥러닝을 학습할 때 그 무엇보다 중요한 부분이
바로 데이터를 준비하는 과정이다.
어떤 데이터로 학습시키는가가 성능에 큰 영향을 줄 수 있으므로 꼭 잘 알고 넘어가야한다.
특히 모든 상황에서 트레이닝 데이터와 테스트 데이터가 나뉘어 제공되진 않으므로
코랩이나 리눅스 상황에서 파일을 분리할 수 있어야한다.
그 방법은 다음과 같다.
# 1. 디렉토리 만들기
os.mkdir('/tmp/cats-v-dogs')
os.mkdir('/tmp/cats-v-dogs/training')
os.mkdir('/tmp/cats-v-dogs/testing')
os.mkdir('/tmp/cats-v-dogs/training/cats')
os.mkdir('/tmp/cats-v-dogs/training/dogs')
os.mkdir('/tmp/cats-v-dogs/testing/cats')
os.mkdir('/tmp/cats-v-dogs/testing/dogs')
제일 먼저 파일을 복사해 넣을 디렉토리를 os의 mkdir 함수로 만들어준다.
# 2. 원본 디렉토리에서 파일명 가져오기
filename_list = os.listdir(SOURCE)
원본 디렉토리를 쉽게 사용하기 위해 listdir 함수를 이용해 변수로 저장한다.
# 3. 셔플해준다.
shuffled_list = random.sample(filename_list, len(filename_list))
다양한 데이터를 위해 데이터의 순서를 random의 sample 함수로 리스트를 섞어준다.
# 4. 트레이닝과 테스팅을 분리하기 위해 인덱스를 잡아준다.
index = int(len(shuffled_list) * SPLIT_SIZE)

인덱스를 잡아준다는 것은 파일 리스트의 전체 갯수 중 90% 든 80%든 나눠 숫자로 저장한다는 뜻이다.
# 5.split 해준다.
training = shuffled_list[ 0 : index ]
testing = shuffled_list[ index : ]
위에서 구한 정수를 토대로 training과 test 로 나누어 저장한다. (아직은 변수에만 저장됨)
# 6. 각각의 분리된 파일의 해당 디렉토리로 복사해준다.
for filename in training:
if os.path.getsize(SOURCE + filename) > 0 :
copyfile(SOURCE + filename, TRAINING+filename)
for filename in testing:
if os.path.getsize(SOURCE + filename) > 0 :
copyfile(SOURCE + filename, TESTING+filename)
마지막으로 for 반복문을 통해 파일의 size가 0보다 큰 데이터는
각각 소스의 경로와 저장할 위치 경로에 파일 이름을 붙여 복사, 저장해주면 된다.
'TensorFlow' 카테고리의 다른 글
Callback 에서 성능이 가장 좋은 모델을 자동 저장하기, 로그 저장하기 (0) | 2022.06.16 |
---|---|
Transfer Learning 과 Fine Tunning (0) | 2022.06.16 |
TensorFlow - Image Data Generator 를 이용해서 데이터 증강하기 (로컬 파일 / 변수에 저장된 파일) (0) | 2022.06.15 |
jpg, png와 같은 이미지 파일을, 학습용 데이터로 만드는 방법 (0) | 2022.06.15 |
TensorFlow - 이미지가 주어졌을 때 Convolution한 결과로 나오는 feature map의 사이즈를 구하는 공식 (0) | 2022.06.14 |
댓글