Я предварительно обрабатываю данные с помощью встроенной функции preprocess_input(), которая вычитает некоторые центральные пиксели.
Теперь при использовании простого изображения с этой функцией предварительной обработки в репрезентативном_dataset_gen() все работает нормально
Код: Выделить всё
def representative_dataset_gen():
pfad='./000001.jpg'
img = cv2.imread(pfad)
img = np.expand_dims(img,0).astype(np.float32)
img = preprocess_input(img)
yield [img]
Код: Выделить всё
def prepare(img):
img = np.expand_dims(img,0).astype(np.float32)
img = preprocess_input(img)
return arg
repDatagen=tf.keras.preprocessing.image.ImageDataGenerator(preprocessing_function=prepare)
datagen=repDatagen.flow_from_directory(folderpath,target_size=size,batch_size=1)
def representative_dataset_gen():
for _ in range(10):
img = datagen.next()
yield [img]
ValueError: не удалось преобразовать значение в читаемый тензор .
Я предполагаю: это связано с ImageDataGenerator(preprocessing_function=prepare) . В описании тензорного потока сказано:
функция, которая будет применяться к каждому входу. Функция запустится
после изменения размера и увеличения изображения. Функция должна принимать один
аргумент: одно изображение (тензор Numpy с рангом 3) и должна выводить
тензор Numpy той же формы.
Я пытался настроить форму вывода img функции «prepare» без и с помощью np.squeez().
В результате получается либо (1,244,244,3), либо (224,224,3). Но я все еще получаю ошибку. Я также попробовал tf.convert_to_tensor() с той же ошибкой.
Код: Выделить всё
def prepare(img):
img = np.expand_dims(img,0).astype(np.float32)
img = preprocess_input(img, version=2)
img = np.squeeze(img)
arg = tf.convert_to_tensor(img, dtype=tf.float32)
return arg
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/647 ... iled-to-co
Мобильная версия