При использовании генератора для репрезентативного набора данных при квантовании «Не удалось преобразовать значение в чиPython

Программы на Python
Ответить
Anonymous
 При использовании генератора для репрезентативного набора данных при квантовании «Не удалось преобразовать значение в чи

Сообщение Anonymous »

Я квантую модель. Модель принимает входные данные размером 224x224.
Я предварительно обрабатываю данные с помощью встроенной функции 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»