Описание ошибки Функция предварительной обработки, которая эффективно возвращает ввод
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.
Вопросы:
- почему я получаю другой результат преобразования ввода в массив и обратно по сравнению с простым возвратом ввода?
- Как мне выяснить, есть ли у меня проблема с зависимостями? Или, лучше, существует ли набор версий пакета, которые, как известно, работают вместе?
фон: Я пытаюсь перенести код на один бэкэнд-кера в тензорном потоке 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'