Я сейчас программирую авто-кодер для сжатия изображений. Из предыдущего поста Теперь у меня есть окончательное подтверждение того, что я не могу использовать чистые функции Python в качестве функций потерь ни в Keras, ни в tenorflow. (И я постепенно начинаю понимать, почему; -)
Я бы хотел провести несколько экспериментов, используя ssim в качестве функции потерь и метрики. Теперь, кажется, мне повезло. Это уже реализовано в тензорном потоке, см .: https://www.tensorflow.org/api_docs/python/tf/image/ssim
tf.image.ssim (
img1,
img2,
max_val
) * +1010 *
Кроме того, bsautermeister любезно предоставил реализацию здесь по стеку: SSIM / MS-SSIM для TensorFlow .
Теперь у меня вопрос: как бы я использовал его как функцию потерь с набором данных mnist? Функция не принимает тензор, а только два изображения. И будет ли градиент вычисляться автоматически? Из того, что я понимаю, это должно быть, если функция реализована в тензорном потоке или керасе.
Буду очень признателен за минимальный рабочий пример (MWE) о том, как использовать любую из ранее упомянутых реализаций ssim в качестве функции потерь в керасе или тензорном потоке.
Может быть, мы можем использовать мой MWE для автоэнкодера, поставляемого с моим предыдущим вопросом:
Пользовательские потери keras чистый питон (без сервера keras)
Если невозможно склеить мой авто-кодер keras вместе с реализациями ssim, возможно ли это с помощью авто-кодера, напрямую реализованного в tenorflow? У меня это тоже есть, и могу ли это предоставить?
Я работаю с python 3.5, keras (с тензорным бэкэндом) и, если необходимо, напрямую с тензорным потоком.
В настоящее время я использую набор mnist (тот, что с цифрами).
Спасибо за любую помощь!
(П.С .: Кажется, что несколько человек работают над подобными вещами. Ответ на этот пост также может быть полезен для Keras - MS-SSIM как функция потери )