Я устранял это несколько часов назад.Хотя это не влияет на многих людей, так как этот сценарий использования довольно специфичен, те, кто затронут, могут попробовать следующее.Это сработало для меня.
Кажется, что проблема связана с неким низкоуровневым поведением Python 3.5, выходящим за рамки моего понимания.Переход на Python 2.7 сделал свое дело, и сеть с самого начала могла достичь точности более 70%.До этого, даже после 10 эпох, точность оставалась на уровне 50%.
Train on 36000 samples, validate on 4000 samples
Epoch 1/10
36000/36000 [==============================] - 866s 24ms/step - loss: 0.2026 - accuracy: 0.7133 - val_loss: 0.2054 - val_accuracy: 0.7173
Epoch 00001: val_loss improved from inf to 0.20544, saving model to model_checkpoint/siamese_40k_headache_20thFeb-1.hdf5
Epoch 2/10
36000/36000 [==============================] - 770s 21ms/step - loss: 0.1949 - accuracy: 0.7271 - val_loss: 0.2020 - val_accuracy: 0.7235
Epoch 00002: val_loss improved from 0.20544 to 0.20204, saving model to model_checkpoint/siamese_40k_headache_20thFeb-1.hdf5
Epoch 3/10
7040/36000 [====>.........................] - ETA: 9:12 - loss: 0.1879 - accuracy: 0.7320
Кроме того, точность проверки на уровне 0,50 при обучении сиамской сети с использованием трансферного обучения также может быть связана с реализацией в Keras метода пакетной нормализации.слой.Подробнее об этом можно прочитать здесь .Установка этой версии Keras вручную исправляет это:
!pip install -U --force-reinstall --no-dependencies git+https://github.com/datumbox/keras@fork/keras2.2.4
Ни в коем случае это не прямое решение проблемы, скорее обходной путь, который работает.