#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])