Tf.image.resize_with_pad выдает ошибку типа

Недавно я ввел изменение размера изображения и случайный поворот в свой загрузчик данных изображения. При попытке обучить CNN выдает следующее сообщение об ошибке:

    File "/home/kit/ifgg/mp3890/LeleNet/py3/LeleNet_trn.py", line 467, in
load_image_train  * input_image = tf.image.resize_with_pad(input_image,
    imgr * scaling, imgc * scaling)

    TypeError: Input 'y' of 'Sub' Op has type int32 that does not match type float32 of argument 'x'.

Минимальный воспроизводимый пример:

imgc, imgr = 256, 256
import tensorflow as tf
img_path = "C:/Users/Manuel/Desktop/B1_6_000300000000_X.png" # see image url below
scaling = ((tf.random.uniform(()) * 0.2) + 0.8)
image = tf.io.read_file(img_path)
image = tf.image.decode_png(image, channels = 3)
input_image = tf.image.resize_with_pad(image, \
                                       target_height = imgr * scaling, \
                                       target_width = imgc * scaling, \
                                       method = "lanczos3")

Пример изображения: Скачать пример изображения (118 КБ)

imgr и imgc — это соответствующее количество строк и столбцов (высота и ширина в пикселях) исходного обучающего изображения и количество строк и столбцов ожидаемых входных данных для обучения модели.

Что такое «x» и «y» в случае приведенного выше сообщения об ошибке (воспроизведение его вне сеанса обучения модели, сообщение об ошибке, которое я получаю, похоже, но в немного другой формулировке)? Я предполагаю, что функция изменения размера принимает изображение и некоторые аргументы (высота, ширина, которые являются числовыми, но не связаны с типом данных изображения)?

Что вызывает эту ошибку и как я могу решить проблему?

Вот пример, который ближе к моему реальному сценарию, но дает ту же ошибку:

imgc, imgr = 256, 256
import tensorflow as tf
img_path = "C:/Users/Manuel/Desktop/B1_6_000300000000_X.png" # see image url
scaling = ((tf.random.uniform(()) * 0.2) + 0.8)
image = tf.io.read_file(img_path)
image = tf.image.decode_png(image, channels = 3)
input_image = tf.cast(image, tf.float32) / 255.0
input_image = tf.image.resize_with_pad(input_image, \
                                       target_height = imgr * scaling, \
                                       target_width = imgc * scaling, \
                                       method = "lanczos3")
InvalidArgumentError: cannot compute Sub as input #1(zero-based) was expected to be a float tensor but is a int32 tensor [Op:Sub]

Я немного озадачен, откуда Tensorflow получает тензор int32? По крайней мере, в последнем примере изображение меняется на tf.float32 со значениями в [0, 1](?)

Пожалуйста, предоставьте минимальный воспроизводимый код, чтобы вызвать ошибку. Включая образец datapoint, imgr и imgc.

ma7555 20.03.2022 05:41

Перефразировал вопрос. В основном речь идет о том, что функция resize_with_pad ожидает на входе. К сожалению, я считаю документацию Tensorflow очень минималистичной.

Manuel Popp 20.03.2022 10:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Неважно, тензор int32 появился из аргументов ширины и высоты. Проблема может быть решена с помощью

target_height = int(tf.math.round(imgr * scaling))

и аналогично по ширине.

Другие вопросы по теме

Как получить уникальный идентификатор для каждого вхождения элемента внутри тензора segment_ids в Tensorflow
Как использовать дополнения с ImageDataGenerator().flow_from_dataframe?
Использование подчеркивания в целочисленных значениях или числовых значениях в документации Tensorflow
Как типы данных, не являющиеся изображениями, такие как 3D-объекты, аудио, видео и т. д., работают с Activeloop Hub?
Не может преобразовать массив размера 486 в форму (1,1)
AttributeError: модуль «keras.api._v2.keras.utils» не имеет атрибута «Последовательный». Я только что запустил нейронную сеть, поэтому помощь будет оценена
Нет ключей val_loss и val_accuracy, когда у меня уже есть validation_data в аргументе model.fit()
Как исправить ошибочное утверждение «выходные каналы должны делиться на группы» при попытке подогнать модель в Keras?
ValueError: невозможно преобразовать массив размера 3 в форму (1,80)
Как перехватывать и передавать внутриуровневые выходные данные в качестве целевых данных