[PYTHON] 예측 중에 keras에서 데이터 정규화는 어떻게 작동합니까?
PYTHON예측 중에 keras에서 데이터 정규화는 어떻게 작동합니까?
imageDataGenerator를 사용하여 다양한 스타일의 데이터 정규화를 지정할 수 있습니다. featurewise_center, samplewise_center 등
예제에서 볼 수 있듯이이 옵션 중 하나를 지정하면 생성기에서 맞는 방법을 호출하여 생성기에서 생성자의 평균 이미지와 같은 통계를 계산할 수 있도록해야합니다.
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True)
# compute quantities required for featurewise normalization
# (std, mean, and principal components if ZCA whitening is applied)
datagen.fit(X_train)
# fits the model on batches with real-time data augmentation:
model.fit_generator(datagen.flow(X_train, Y_train, batch_size=32),
samples_per_epoch=len(X_train), nb_epoch=nb_epoch)
내 질문은, 훈련 도중 데이터 정규화를 지정했다면 예측은 어떻게 작동합니까? 나는 프레임 워크에서 훈련의 지식을 전달할 때 심지어 평균 / 표준 편차를 따라 내 테스트 데이터를 정상화 할 수 있을지 예측할 수는 없지만이 정보가있는 교육 코드는 볼 수 없다. 저장된.
예측 중에 사용할 수 있도록 정규화에 필요한 이미지 통계가 모델에 저장되어 있습니까?
해결법
-
==============================
1.예 - Keras.ImageDataGenerator의 거대한 단점은 독자적으로 표준화 통계를 제공 할 수 없다는 것입니다. 하지만이 문제를 극복하는 방법은 쉬운 방법이 있습니다.
예 - Keras.ImageDataGenerator의 거대한 단점은 독자적으로 표준화 통계를 제공 할 수 없다는 것입니다. 하지만이 문제를 극복하는 방법은 쉬운 방법이 있습니다.
이미지 일괄 처리를 정규화하는 함수 normalize (x)가 있다고 가정합니다. 생성자는 이미지가 아닌 이미지 배열을 제공합니다. 모양이있는 일괄 처리 (nr_of_examples_in_batch, image_dims ..)를 사용하면 생성기를 직접 생성 할 수 있습니다. 다음을 사용하여 정규화 :
def gen_with_norm(gen, normalize): for x, y in gen: yield normalize(x), y
그런 다음 datagen.flow 대신 gen_with_norm (datagen.flow, normalize)을 사용하면됩니다.
더욱이 - 맞춤법으로 계산 된 평균 및 표준을 복구 할 수 있습니다 (예 : datagen.mean 및 datagen.std).
-
==============================
2.각 요소에 대해 생성기의 표준화 방법을 사용하십시오. 다음은 CIFAR 10의 전체 예제입니다.
각 요소에 대해 생성기의 표준화 방법을 사용하십시오. 다음은 CIFAR 10의 전체 예제입니다.
#!/usr/bin/env python import keras from keras.datasets import cifar10 from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D # input image dimensions img_rows, img_cols, img_channels = 32, 32, 3 num_classes = 10 batch_size = 32 epochs = 1 # The data, shuffled and split between train and test sets: (x_train, y_train), (x_test, y_test) = cifar10.load_data() print(x_train.shape[0], 'train samples') print(x_test.shape[0], 'test samples') # Convert class vectors to binary class matrices. y_train = keras.utils.to_categorical(y_train, num_classes) y_test = keras.utils.to_categorical(y_test, num_classes) model = Sequential() model.add(Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=x_train.shape[1:])) model.add(Conv2D(32, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Conv2D(64, (3, 3), padding='same', activation='relu')) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 datagen = ImageDataGenerator(zca_whitening=True) # Compute principal components required for ZCA datagen.fit(x_train) # Apply normalization (ZCA and others) print(x_test.shape) for i in range(len(x_test)): # this is what you are looking for x_test[i] = datagen.standardize(x_test[i]) print(x_test.shape) # Fit the model on the batches generated by datagen.flow(). model.fit_generator(datagen.flow(x_train, y_train, batch_size=batch_size), steps_per_epoch=x_train.shape[0] // batch_size, epochs=epochs, validation_data=(x_test, y_test))
-
==============================
3.datagen.fit 함수 자체를 사용하고 있습니다.
datagen.fit 함수 자체를 사용하고 있습니다.
from keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator( featurewise_center=True, featurewise_std_normalization=True) train_datagen.fit(train_data) test_datagen = ImageDataGenerator( featurewise_center=True, featurewise_std_normalization=True) test_datagen.fit(train_data)
이것으로 이상적으로, training_datagen이 training 데이터 셋 통계를 학습하게됩니다. 그런 다음이 통계를 사용하여 테스트 데이터를 정규화합니다.
-
==============================
4.나 또한 같은 문제가 있었고 동일한 기능을 사용하여 ImageDataGenerator를 사용하여 해결했습니다.
나 또한 같은 문제가 있었고 동일한 기능을 사용하여 ImageDataGenerator를 사용하여 해결했습니다.
# Load Cifar-10 dataset (trainX, trainY), (testX, testY) = cifar10.load_data() generator = ImageDataGenerator(featurewise_center=True, featurewise_std_normalization=True) # Calculate statistics on train dataset generator.fit(trainX) # Apply featurewise_center to test-data with statistics from train data testX -= generator.mean # Apply featurewise_std_normalization to test-data with statistics from train data testX /= (generator.std + K.epsilon()) # Do your regular fitting model.fit_generator(..., validation_data=(testX, testY), ...)
이는 CIFAR-10과 같이 합당한 작은 데이터 세트가있는 경우에만 가능합니다. 그렇지 않으면 Marcin이 제안한 해결책이 훨씬 더 합리적으로 들립니다.
from https://stackoverflow.com/questions/41855512/how-does-data-normalization-work-in-keras-during-prediction by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Objective-C에서 파이썬 호출하기 (0) | 2018.10.21 |
---|---|
[PYTHON] Python으로 작성된 프로그램 배포 [duplicate] (0) | 2018.10.21 |
[PYTHON] django 2.0에서는 urls.py에서 path () 또는 url ()을 사용하는 것이 더 좋습니까? (0) | 2018.10.21 |
[PYTHON] 문자열에서 모든 구두점을 제거하는 방법? (파이썬) [복제] (0) | 2018.10.21 |
[PYTHON] 특정 투영법을 사용할 때 Basemap.contour ()가있는 IndexError (0) | 2018.10.21 |