Попытка получить свертку одного изображения - PullRequest
2 голосов
/ 03 июля 2019

Я пытаюсь получить результат одной свертки для изображения, используя tf.keras.backend.conv2d.

Характеристики ввода: 227 пикселей на 227 пикселей, с размером канала 3 (RGB-изображение).

Размер фильтра, который я хотел бы использовать, - 11x11 и шаг 4. Без добавления нуля.

Я не женат на идее использования tf.keras.backend.conv2d. Я готов изменить методы / пакеты, если получу свернутое изображение с указанными выше требованиями.

Вот кусок кода, который я пытаюсь заставить работать:

import tensorflow as tf
from tensorflow import keras
import cv2

image = cv2.imread('pic.jpg')

tf.keras.backend.conv2d(image,11,strides=4,data_format="channels_last",dilation_rate=(1))

Я получаю это сообщение об ошибке

InvalidArgumentError: невозможно вычислить Conv2D, поскольку ожидается, что вход № 1 (на основе нуля) будет двойным тензором, но является тензором int32 [Op: Conv2D] name: convolution /

Если есть что-то, что я могу добавить, чтобы уточнить, пожалуйста, дайте мне знать. Я могу опубликовать весь код, но большая его часть не имеет значения, по крайней мере, на мой взгляд.

Спасибо всем, кто нашел время, чтобы помочь мне!

1 Ответ

0 голосов
/ 04 июля 2019

Вы используете неправильную функцию. То, что вы используете, - это свертка op , которая принимает входные данные и тензор фильтра и выполняет свертку. Таким образом, вторым аргументом должен быть сам тензор фильтра. Вы пытаетесь передать 11 как тензор фильтра, который, очевидно, не имеет смысла. Я подозреваю, что вы хотите использовать tf.keras.layers.Conv2D, который заботится о создании фильтра в соответствии с некоторой спецификацией, а затем оборачивает сверточную операцию. Попробуйте это:

conv_layer = tf.layers.Conv2D(1, 11, 4)
result = conv_layer(image)

Это создает фильтр 11x11 и операцию свертки с шагом 4; вторая строка затем вызывает оп. Я поставил 1 в качестве количества фильтров (первый аргумент), поскольку я не знаю, что именно вы пытаетесь сделать.

...