Как решить проблему размерности для SpatialPyramidPooling2D

#python #tensorflow #keras #deep-learning

#python #тензорный поток #keras #глубокое обучение

Вопрос:

В настоящее время я работаю с дополнениями TensorFlow SpatialPyramidPooling2D layer для классификации изображений, и я получил следующую ошибку, когда попытался подогнать модель.

 ValueError: Dimensions must be equal, but are 8 and 20 for '{{node MatMul}} = BatchMatMulV2[T=DT_FLOAT, adj_x=false, adj_y=false](feature, transpose_1)' with input shapes: [?,20,8], [8,20,?]
 

Я сомневаюсь, что это как-то связано с формой вывода модели. Последний слой должен быть (None,<number_of_classes>), но я получил (None,<number_of_channels>,<number_of_classes>). Потому что вывод spatialpyramidpooling2d является 3D-тензором.

Я попытался решить ее, добавив слой выравнивания сразу после SpatialPyramidPooling2D, но в итоге слой softmax выдает ошибку, как показано ниже

 ValueError: Input 0 of layer dense is incompatible with the layer: expected axis -1 of input shape to have value 1280 but received input with shape [None, 25600]
 

Комментарии:

1. Какой была форма до появления пирамиды?

Ответ №1:

Если вам нужен вывод формы (None, 8) , я предлагаю вам добавить 1D объединяющий слой после объединения в пирамиду.

 import tensorflow as tf

x = tf.random.uniform((10, 20, 8), dtype=tf.float32)

pool = tf.keras.layers.GlobalAveragePooling1D()

print(pool(x).shape)
 
 TensorShape([10, 8])