Как обучить сети общего кодера без совместного использования, используя единственную функцию потерь - PullRequest
0 голосов
/ 23 сентября 2019

Обучаем две совместно используемые нейронные сети.

У меня есть две разные сети с автоматическим кодировщиком, одна для изображений с камеры, которая берет входное изображение и пытается воспроизвести одно и то же изображение с помощью транспонированного сверточного метода,Вторая сеть берет эскизное изображение и делает то же самое.Обе сети имеют одинаковую структуру, но изучают разные фильтры.

autoencoder_p = Model(input_img, decoder_p(encoder_p(input_img)))
autoencoder_s = Model(input_img, decoder_s(encoder_s(input_img)))

autoencoder_p.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
autoencoder_p.fit(X_train_real, X_train_real, epochs=10, batch_size=1, validation_split=0.1)

autoencoder_s.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
autoencoder_s.fit(X_train_sim, X_train_sim, epochs=10, batch_size=1, validation_split=0.1)

Проблема в том, что мне приходится компилировать и обучать обе сети одна за другой.Есть ли какой-нибудь возможный способ собрать и обучить обе сети вместе.Потому что обе сети идентичны и используют одну и ту же стратегию потери и обучения.

1 Ответ

1 голос
/ 23 сентября 2019

Создайте одну модель, содержащую оба.

Предупреждение: ваш код использует одно и то же входное изображение для обоих, что не соответствует описанию.Есть два входа input_img_p и input_img_s.

twin_model = Model([input_img_p, input_img,_s],
                   [
                       decoder_p(encoder_p(input_img_p)),
                       decoder_s(encoder_p(input_img_s)),                             
                   ])

twin_model.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
twin_model.fit([X_train_real, X_train_sim], [X_train_real, X_train_sim], ...)
...