1)
Это произвольный выбор, вы могли бы выбрать любое количество каналов для слоя Dense.
16x16 выбрано, поскольку для шага 2 задано значение Conv2DTranspose
, и вы хотите увеличить ширину и высоту, чтобы получить выход 32x32.
Шаги используются для влияния на выходной размер сверточных слоев. В обычных свертках выходные данные подвергаются понижающей дискретизации с тем же коэффициентом, что и шаги, тогда как в транспонированных извилинах они подвергаются дополнительной дискретизации с тем же коэффициентом, что и шаги.
Например, вы можете изменить выход первого слоя на 8x8x128 и затем использовать шаг 4 в вашем Conv2DTranspose
, таким образом, вы получите тот же результат с точки зрения размерности.
Также имейте в виду, что, как сказал Франсуа Шоле в своей книге, при использовании шаговых транспонированных сверток, чтобы избежать артефактов шахматной доски, вызванных неравномерным охватом пиксельного пространства, размер ядра должен делиться на количество шагов.
2) Первый аргумент, который вы задаете в Conv2D
или Conv2DTranspose
, - это количество фильтров, созданных слоем свертки.
Как уже было сказано, шаг Conv2DTranspose
используется точно для увеличения ширины и высоты выборки с коэффициентом, равным количеству шагов.
Другие 3 Conv2D
также являются произвольными, вы должны определить их экспериментально и подстроив вашу модель.