일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 안좋은습관10가지
- TensorFlow
- 일기
- 요구사항정의서 #기획 #UI/UX기획
- behaviorsubject
- webpack
- es5 #es6
- Git
- 해시함수
- angular
- Storyboard
- keytool
- Vue
- 가상사설망
- javascript #prototype # array # find()
- SSL인증서
- CSS #flex
- CSS #pseudo-classes
- anaconda
- 웹기획
- nodejs
- privateKey
- typescript
- tsotry
- PublicKey
- Ke
- Javascript #MDN #Webs #Docs
- securitykey
- guide
- passport.js
- Today
- Total
민자의 지식창고
ImageDataGenerator 본문
ImageDataGenerator 클래스를 통해 객체를 생설 할 때 파라미터를 전달해주는 것을 통해 데이터의 전처리를 쉽게 할 수 있고, 또 이 객체의 flow_form_directory 메소드를 활용하면, 폴더 형태로된 데이터 구조를 바로 가져와서 사용이 가능 합니다.
1. ImageDataGenerator를 사용한 데이터를 크게 부풀립니다, (10개 이미지만 있다면, 10개 이미지 기준으로 더 많게)
아래는 ImageDataGenerator 설정 옵션 입니다.
- shear_range : Float, Shear Intensity ( share angle in counter-clockwise direction as radians) 밀린강도 범위내에서 임의로 원본 이미지를 변형 시킵니다. 수치는 시계반대방향으로 밀림강도를 radian으로 나타냅니다.
- zoom_range : Float or [lower, upper]. Range for random zoom. if a float, 지정된 확대/축소 범위내에 임의로 원본이미지를 확대/ 축소 합니다. (1 - 수치) ~ (1+ 수치) 사이의 범위로 확대 축소를 합니다. ex> zoom_range = 0.3
- horizontal_flip : Boolean, Randomly flip inputs horizontally. 수평방향 뒤집기(true)
- vertical_flip : 수직 방향 뒤집기(true)
- rescale : rescaling factor. Defaults to None. If None or 0, no rescaling is applied, otherwise we multipy the data by the value provided (before applying any other transformation)
- rotaion_range : 지정된 각도 범위내에서 임의로 원본 이미지를 회전 시킵니다. 단위 도, 정수형 ex>rotaion_range=90
- width_shift_range : 지정된 수평방향 이동 범위 내에서 임의로 원본 이미지를 이동 시킵니다. 수치는 전체 넓이의 비율(실수)로 나타냅니다. ex> 0.1이면 전체 넓이 100의 10px 좌우로 이동
- hight_shift_range: 지정된 수직방향 이동 범위 내에서 임의로 원본 이미지를 이동 시킵니다. 수치는 전체 넓이의 비율(실수)로 나타냅니다
실제 코드 입니다.
keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,
samplewise_center=False,
featurewise_std_normalization=False,
samplewise_std_normalization=False,
zca_whitening=False,
rotation_range=0.,
width_shift_range=0.,
height_shift_range=0.,
shear_range=0.,
zoom_range=0.,
channel_shift_range=0.,
fill_mode='nearest',
cval=0.,
horizontal_flip=False,
vertical_flip=False,
rescale=None,
preprocessing_function=None,
data_format=K.image_data_format())
2. 훈련 데이터 셋을 부필리면서, 테스트 셋을 부풀린 필요가 없읍니다.
대신 훈련 데이터를 부풀리면, fit_generator 함수에서 steps_per_epoch의 값은 기존에서 더 많은 수로 설정 합니다.
batch size * steps_per_epoch가 전체 샘플 수인데, 만약 데이터 부풀리기를 하지 않을 떄는 기존의 개수(15개)의 배치 사이즈로(3개) 전체 45개를 모두 학습에 사용 할수 있지만, ImageDataGenrator 함수를 통해 데이터 부풀리기는 할 때는 하나의 샘플로 여러개의 결과를 얻기 때문에 요청하는 데로 무한의 샘플이 제공 됩니다.
그래서 한 * 100배 정도 1500개로 설정 했습니다.
3.동일한 모델을 사용하면서, 데이터만 잘 부풀렸을때 기존 보다 더 좋은 성능 향상을 가져 옵니다.
여기서 2번의 step_per_epoch의 값이 * 100 하였더니 에러가 발생 하였습니다.
그대로 하는데신, 1번의 옵션을 다양하게 주었는데 그에 따라서 정확도는 60~80%까지 왔다 갔다 수치가 상당히 많이 변하였습니다.
4. batch size =3 , epoch = 200 으로 수행하였더니, 86%까지 상승 하였습니다.
아래는 위의 설정으로 데이터를 부풀려서, 정확도 측정 86%까지 올라갔습니다.
5. 데이터 부풀리기에 옵션에 따라 어떤 데이터를 어떻게 쓰는지 조금더 확인해봐야 알것 같습니다.
결론은 삽질중 니다
(추가)
삽질 하고 난후 아래와 조건에서 실행이 됩니다.
epoch > batch_size * step_per_epoch
삽질 이유는 ? 즉, 3번에서 Error가 나온 이유는
epoch < batch_size * step_per_epoch 와 같은 상황이기 때문입니다.
본문은 아래 참고 하였습니다
https://tykimos.github.io/2017/06/10/CNN_Data_Augmentation
컨볼루션 신경망 모델을 위한 데이터 부풀리기
본 강좌에서는 컨볼루션 신경망 모델의 성능을 높이기 위한 방법 중 하나인 데이터 부풀리기에 대해서 알아보겠습니다. 훈련셋이 부족하거나 훈련셋이 시험셋의 특성을 충분히 반영하지 못할 �
tykimos.github.io
6. 테스트 결과율 80~ 95% 까지 올린 옵션 내용 입니다.
아직도 갈길이 멀기는 하지만 소정의 효과를 보았습니다.
'개발노트 > Tensorflow' 카테고리의 다른 글
CNNS (0) | 2020.08.26 |
---|---|
숫자 인식 해보기 (0) | 2020.08.12 |
이미지 숫자 인식하기3 (0) | 2020.08.04 |
이미지의 숫자 인식 하기2(CNN모델) (0) | 2020.08.04 |
이미지의 숫자 인식 하기1(CNN모델) (0) | 2020.08.04 |