Data

안선경·2023년 4월 26일
0

DL_study

목록 보기
10/23

  • 이번에는 데이터를 local파일에서 바로 불러오는 방법으로 해봤다.
  • 먼저 os 모듈을 통해 파일의 내용을 확인하고, glob모듈을 통해 데이터셋을 리스트 형태로 불러왔다.
  • 그리고 하나의 파일을 io모듈로 읽어보니 코드로 묶여있다.
  • 묶인 파일을 decode를 통해 풀어주고, 32*32 픽셀에 3개 즉 rgb(색채) 이미지의 데이터가 array형태로 출력된다.
  • 이미지를 확인해보니 두꺼비인듯하다.
  • 이제 위에 과정을 하나의 함수로 만들었다.
  • 하지만 위와 같은 방법은 사진 한장한장을 데이터로 모두 저장하기 때문에 저장 공간의 한계가 명확하다.
  • 그래서 사진을 부분부분 짤라서 사용할 수 있는 방법이 있다.
  • tensorflow.data.Dataset.from_tensor_slices를 사용해서 부분적으로 잘라서 사용할 수 있다.
  • AUTOTUNE은 자신이 사용하고 있는 컴퓨터의 사양에 최적화된 병렬구조를 설정해준다.
  • dataset.map은 해당 메소드에 입력한 함수를 데이터 전체에 적용시켜주고, 밑에 batch_size를 설정하고 refetch는 하나의 뭉터기를 교육할 때 다음 뭉터기를 미리 읽음으로써 실행 속도를 높여준다.
  • shuffle은 무작위로 데이터를 교육시키며 repeat은 하나의 epoch안에서 무한히 돌아 교육시키는데 나중에 for문을 통해 epoch를 설정하기 때문에 무한으로 값을 넣었다.
  • 그리고 라벨값을 만들기 위해 데이터셋에 string을 쪼개서 동물의 이름만 나오게 하고, 해당 값이 array형태로 바꾼 라벨리스트에서 해당하는 위치에 True(1)이 나오게 해서 class개수에 따른 onehotEncorder형태로 만들었다.
  • 그리고 이미지 array를 만드는 함수를 이용해 x, y를 데이터를 만드는 함수를 만들었다.
  • 이제 만든 함수를 map 입력값에 넣어서 각 원소에 적용되게 만든 후 데이터셋을 보니 교육데이터와 결과 데이터가 제대로 들어가있다.
  • 이번에는 라벨값을 string형태가 아니라 바로 tensor타입으로 변환하는 방식으로 진행했다.
  • tensorflow.strings.split를 통해 Label값만을 추출하고, cast를 통해 원핫인코딩 형태로 Label값을 출력했다.
  • 먼저 원핫인코딩을 만들어주는 함수를 만들고, 해당 함수를 새로운 함수에 넣어서 map를 통해 각 원소에 적용해주면 아까와 같이 32개의 사진이 32*32픽셀에 rgb색채의 데이터라 출력된다.
  • 아재 해당 데이터를 통해 model에 compile를 통해 학습 과정을 설정하고, fit과정에서 아까 repeat()를 무한으로 줬기 때문에 fit자체에서 per_epoch를 설정해줘야한다.
profile
상황을 바꿀 수 없다면, 나를 바꾸자

0개의 댓글