Я знаю, что есть некоторые методы, помогающие устранить исчезающие проблемы градиента, такие как relu, пакетная нормализация, resnet. Я пробовал первые два, но моя сеть все еще испытывает исчезающую проблему градиента: градиент составляет приблизительно 0 в первых нескольких слоях. Я не пробовал реснет, так как не уверен, стоит ли пробовать его в VAE, потому что он не углубляет карту возможностей.
Вот моя архитектура для сети кодировщика
# x = 320, 320, 3
x = conv_bn_relu(x, 16, 3, 2) # x = 160, 160, 16
x = conv_bn_relu(x, 32, 3, 2) # x = 80, 80, 32
x = conv_bn_relu(x, 64, 3, 2) # x = 40, 40, 64
x = conv_bn_relu(x, 128, 3, 2) # x = 20, 20, 128
x = conv_bn_relu(x, 256, 3, 2) # x = 10, 10, 256
x = conv_bn_relu(x, 512, 3, 2) # x = 5, 5, 512
x = conv(x, 2 * 128, 5, padding='valid') # 128 is the size of latent vector z
, где conv_bn_relu
состоит из сверточного уровня с заданными аргументами, уровня пакетной нормализации и уровня реляции. Декодер аналогичен, за исключением использования сверточного транспонированного слоя.
Я действительно надеюсь, что кто-нибудь даст мне еще совет.