Ошибка Keras: вход 0 слоя density_3 несовместим со слоем:: ожидаемый min_ndim = 2, найденный ndim = 1. Полная форма получена: [16] - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу сравнить два изображения, представленные векторами признаков. Для этого я использовал некоторый существующий код сиамских нейронных сетей, с последней частью, которая вычисляет абсолютную разницу двух векторов признаков, а затем дает оценку сходства (используя сигмоидную функцию).

Итак, я попытался адаптировать код, вот что я получил:

# 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 измерения как и ожидалось плотным слоем.

Спасибо за вашу помощь.

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