Ошибка? функция предварительной обработки ImageDataGenerator из tf.Keras - PullRequest
0 голосов
/ 08 мая 2020

Описание ошибки Функция предварительной обработки, которая эффективно возвращает ввод

def foo(inp): 
 inp = keras.preprocessing.image.img_to_array(inp)
 return keras.preprocessing.image.array_to_img(inp)

, приводит к ошибке TypeError: неподдерживаемые типы операндов для * =: 'Image' и 'float' когда я делаю from tensorflow import keras, но не с import keras Другой способ остановить ошибку - заменить backg_subtr:

def foo(inp): 
 return inp 

Environment: tenorflow-gpu backend (v1.05) с tf.keras v2.1.2-tf. Keras v2.1.5. Я получаю ту же ошибку в новой среде с tenorflow 2.1 и без отдельного пакета keras.

Вопросы:

  1. почему я получаю другой результат преобразования ввода в массив и обратно по сравнению с простым возвратом ввода?
  2. Как мне выяснить, есть ли у меня проблема с зависимостями? Или, лучше, существует ли набор версий пакета, которые, как известно, работают вместе?

фон: Я пытаюсь перенести код на один бэкэнд-кера в тензорном потоке 2.1. Моим первым шагом было заменить все функции, вызывающие keras, на tf.keras. conda install tensorflow=2.1 не устанавливает подушку (которая необходима), поэтому, возможно, версия подушки, которая у меня сейчас есть, не подходящая, и, возможно, есть другие необходимые пакеты, которые были установлены, но не имеют правильной версии.

пример кода , который вызывает ошибку (данные представляют собой набор из 80x80 8-битных файлов RGB .png.):

useTfKeras = True 

if useTfKeras:
    from tensorflow import keras
else:
    import keras

import numpy as np


def backg_subtr(inp): 
     inp = keras.preprocessing.image.img_to_array(inp)
     # if useTfKeras:
     #     return inp    
     return keras.preprocessing.image.array_to_img(inp)

pathin = 'D:\\Data\\val_set\\'
thumb_shape = (80,80)
input_shape = thumb_shape + (3,) # keras.backend.image_data_format() == "channels_first"

sample_names_use = ['Type A', 'Type B', 'Type C']

test_datagen = keras.preprocessing.image.ImageDataGenerator(
    rescale = 1./255, 
    preprocessing_function=backg_subtr
    )
thumb_generator = test_datagen.flow_from_directory(
    pathin, 
    target_size=thumb_shape, 
    batch_size=1, 
    class_mode="sparse", 
    shuffle=False, 
    follow_links=True
    )

x_thumbs = np.empty((len(thumb_generator),) + input_shape, dtype=np.float32)
y_presco = np.zeros((len(thumb_generator),),"int8")-1 # initialize the prescore to -1

for idx2 in range(len(thumb_generator)):
    (x_thumbs[idx2,],y_presco[idx2,]) = thumb_generator.next()

трассировка:

runfile('C:/proj/DL_code/code/MWE_Generator bug.py', wdir='C:/proj/DL_code_/code')

Traceback (most recent call last):

  File "<ipython-input-54-f6170b62f133>", line 1, in <module>
    runfile('C:/proj/DL_code/code/MWE_Generator bug.py', wdir='C:/proj/DL_code/code')

  File "C:\Users\CoumansF\AppData\Local\Continuum\anaconda3\envs\DLenv\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "C:\Users\CoumansF\AppData\Local\Continuum\anaconda3\envs\DLenv\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/proj/DL_code/code/MWE_Generator bug.py", line 40, in <module>
    (x_thumbs[idx2,],y_presco[idx2,]) = thumb_generator.next()

  File "C:\Users\CoumansF\AppData\Local\Continuum\anaconda3\envs\DLenv\lib\site-packages\tensorflow\python\keras\_impl\keras\preprocessing\image.py", line 1243, in next
    return self._get_batches_of_transformed_samples(index_array)

  File "C:\Users\CoumansF\AppData\Local\Continuum\anaconda3\envs\DLenv\lib\site-packages\tensorflow\python\keras\_impl\keras\preprocessing\image.py", line 1208, in _get_batches_of_transformed_samples
    x = self.image_data_generator.standardize(x)

  File "C:\Users\CoumansF\AppData\Local\Continuum\anaconda3\envs\DLenv\lib\site-packages\tensorflow\python\keras\_impl\keras\preprocessing\image.py", line 590, in standardize
    x *= self.rescale

TypeError: unsupported operand type(s) for *=: 'Image' and 'float'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...