Я хочу сравнить два изображения, представленные векторами признаков. Для этого я использовал некоторый существующий код сиамских нейронных сетей, с последней частью, которая вычисляет абсолютную разницу двух векторов признаков, а затем дает оценку сходства (используя сигмоидную функцию).
Итак, я попытался адаптировать код, вот что я получил:
# Add a customized layer to compute the absolute difference between the encodings
L1_layer = tensorflow.keras.layers.Lambda(lambda tensors:K.abs(tensors[0] - tensors[1]), output_shape=(1,16))
L1_distance = L1_layer(K.constant(vectors(x_train, 0)))
# Add a dense layer with a sigmoid unit to generate the similarity score
prediction = Dense(1,activation='sigmoid', bias_initializer=initializers.Constant(0.1))(L1_distance)
# Connect the inputs with the outputs
siamese_net = Model(inputs= keras.layers.Input(shape=(2, 16)),outputs=prediction)
Векторы функций (x_train, 0) вычисляют массив numpy, содержащий два вектора функций (каждый вектор объектов также является массивом длиной 16, поэтому конечный результат функции [[vector1], [vector2]].)
Когда я выполняю код, я сталкиваюсь со следующей ошибкой: линия, где я создаю плотный слой:
ValueError: Input 0 of layer dense_3 is incompatible with the layer: : expected min_ndim=2, found ndim=1. Full shape received: [16]
Я не совсем понимаю, так как я явно указал, что выходной размер моего лямбда-слоя равен (1,16), который имеет 2 измерения как и ожидалось плотным слоем.
Спасибо за вашу помощь.