2017-07-12 2 views
0

Ich möchte einige benutzerdefinierte Bildvorverarbeitungsfunktion zusammen mit ImageDataGenerator-Funktion in Keras verwenden. Zum Beispiel sieht meine kundenspezifische Funktion wie folgt aus:Keras angepasste Bildvorverarbeitungsfunktion verursacht Wert Fehler "Ausgabe-Array ist schreibgeschützt"

def customizedDataAugmentation(x): 
    choice = np.random.choice(np.arange(1, 4), p=[0.3, 0.3, 0.4]) 
    if choice==1: 
     x = exposure.adjust_gamma(x, np.random.uniform(0.5,1.5)) 
    elif choice==2: 
     ix = Image.fromarray(np.uint8(x)) 
     blurI = ix.filter(ImageFilter.GaussianBlur(np.random.uniform(0.1,2.5))) 
     x = np.asanyarray(blurI) 
    return x 

Und die Art und Weise zu verwenden, es ist wie:

 self.train_datagen = image.ImageDataGenerator(
      rescale=1./255, 
      zoom_range=0.15, 
      height_shift_range=0.1, 
      horizontal_flip=True, 
      preprocessing_function=customizedDataAugmentation 
     ) 

Allerdings, wenn ich dem Training beginnen, es springt aus diesen Fehler:

Traceback (most recent call last): 
File "/home/joseph/miniconda3/envs/py27/lib/python2.7/threading.py", line 801, in __bootstrap_inner 
    self.run() 
File "/home/joseph/miniconda3/envs/py27/lib/python2.7/threading.py", line 754, in run 
    self.__target(*self.__args, **self.__kwargs) 
File "/home/joseph/miniconda3/envs/py27/lib/python2.7/site-packages/keras/utils/data_utils.py", line 560, in data_generator_task 
    generator_output = next(self._generator) 
File "/home/joseph/miniconda3/envs/py27/lib/python2.7/site-packages/keras/preprocessing/image.py", line 1039, in next 
    x = self.image_data_generator.standardize(x) 
File "/home/joseph/miniconda3/envs/py27/lib/python2.7/site-packages/keras/preprocessing/image.py", line 494, in standardize 
    x *= self.rescale 
ValueError: output array is read-only 

self.image_data_generator.standardize(x) ist die Funktion, die die benutzerdefinierte Funktion aufruft. Die Definition sieht in etwa so aus:

Wenn ich meine benutzerdefinierte Funktion nicht aufrufen würde, hätte ich diesen Fehler nicht. Wer weiß, was passiert?

+0

Was passiert, wenn Sie 'x = np.array (blurI)' statt? –

Antwort