Начнём с обучения классификатора. Для этого возьмем массив истинных и ложных объектов и натренируем сеть на этой выборке. Далее построим сеть из этого экземпляра классификатора (дискриминатора) с присоединенным к нему необученным генератором. Мы пользуемся тем, что можно создавать сети из других сетей.
Какие будут размерности входов и выходов этой склеенной сети?
Далее запустим обучение связки генератор-дискриминатор и обучим её новой интересной задаче. Мы хотим, чтобы все классы на выходе были истинными. Для этого зададим функцию потерь, чтобы она наказывала сеть за каждый объект, причисленный к ложному классу. Истинные классы будут на выходе, только если генератор найдёт изображения, истинные с точки зрения дискриминатора. Конечно, для этого во время обучения мы блокируем изменение весов в нейронах дискриминатора, чтобы дискриминатор не потерял свой навык. Мы добиваемся того, чтобы генератор подстроился под этот навык. Тут мы пользуемся возможностью блокировать и разблокировать обучение любого слоя.
Итак, мы обучили дискриминатор, а затем генератор. Можно ли считать, что задача выполнена? Нет, так как генератор мог научиться выдавать одно и то же изображение, которое классификатор считает истинным, и посчитать, что больше ему учиться нечему. Нужно не дать этому способу обучения закрепиться, признать его неверным. Пусть генератор ищет принцип генерации, а не конечный ответ. Для этого нужно переобучить дискриминатор, но уже не по изначальной выборке, а взяв из неё только изображения, причисленные к истинному классу, ложные же объекты взять у генератора. Для этого запустим генератор, чтобы он создавал новые изображения.
Какой функцией tensorflow мы воспользуемся?
В результате мы получим выборку из истинных и ложных объектов, для которых предыдущие достижения генератора уже не подходят. Ему придётся искать новые.
Можно ли не брать каждый раз заново сгенерированные объекты, а запоминать все ложные? Да, возможно такой способ будет даже лучше. Далее мы снова возвращаемся к обучению генератора в связке с дискриминатором.