создать модель Tensorflow, которая принимает тензорное изображение в качестве входных данных для модели - PullRequest
0 голосов
/ 27 апреля 2020

Я использую приведенную ниже конфигурацию для модели классификации изображений:

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(100, 100, 3)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10)
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

Если I, если print model.inputs, то он возвращает

[<tf.Tensor 'flatten_input:0' shape=(None, 100, 100, 3) dtype=float32>]

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

Я передаю изображение, используя следующий код:

image = np.asarray(image)
# The input needs to be a tensor, convert it using `tf.convert_to_tensor`.
input_tensor = tf.convert_to_tensor(image)
# The model expects a batch of images, so add an axis with `tf.newaxis`.
input_tensor = input_tensor[tf.newaxis,...]
# Run inference
output_dict = model(input_tensor)

Я получаю ошибку ниже, если я передам тензорное изображение

WARNING:tensorflow:Model was constructed with shape (None, 100, 100, 3) for input Tensor("flatten_input:0", shape=(None, 100, 100, 3), dtype=float32), but it was called on an input with incompatible shape (1, 886, 685, 3).
---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)

Я просто хотел узнать, какие слои Keras и входные параметры я должен обновить в модели, чтобы она могла принимать тензорное изображение в качестве входных данных. Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Сообщение является предупреждением, а не ошибкой, просто некоторая семантика. Предупреждение действительно указывает на реальную проблему.

Ваша модель принимает изображения с формой (100, 100, 3), и вы даете ей входные данные с формой (886, 865, 3). Пространственные размеры не совпадают, вам нужно изменить размер изображения до размера 100 x 100.

0 голосов
/ 27 апреля 2020

Определяя вашу модель, вам нужно указать keras количество каналов ваших изображений: 1 для черно-белого изображения, 3 для RGB ...

Так что вам нужно написать:

keras.layers.Flatten(input_shape=(1, 100, 100, 3)) for a 1 channel picture

Я также заметил, что вы не определили функцию активации для последнего слоя: keras.layers.Dense(10), если вы определяете потерю как кроссцентропию, вам нужно получить некоторую вероятность в качестве выхода вашей сети, например keras.layers.Dense(10, activation='softmax')

Надеюсь, это понятно для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...