在变分自编码上获得越来越大的损失和低效的表现

2024-04-24 13:52:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我是神经网络的初学者,目前正致力于用神经网络分析蛋白质序列比对数据。数据被转换成一个热编码二进制数据。我用keras来制作我的可变自动编码器。我的模型有4个“密集”层编码器和解码器。通过“批处理规范化”对输入进行规范化,并在模型内部添加了删除层。优化器是Adam。问题是我的损失非常巨大,而且还在不断增加,他们很快就到达了南。我尝试使用学习率=0.1、0.2或0.8,并使用衰减来降低学习率。但没用。我在这个模型上呆了一个星期…几乎崩溃了。谢谢你的帮助!在

x = Input(shape=(original_dim,))
dr = Dropout(0.7)
h1z = BatchNormalization(mode = 0)(x)
h1 = Dense(intermediate_dim, activation='elu')(h1z)
h2 = dr(Dense(intermediate_dim2, activation='elu')(h1))
h3 = Dense(intermediate_dim3, activation = 'elu')(h2)
h4 = Dense(intermediate_dim4, activation = 'elu')(h3)

z_mean = Dense(latent_dim)(h4)
z_log_var = Dense(latent_dim)(h4)

def sampling(args):
    z_mean, z_log_var = args
    epsilon = K.random_normal(shape=(K.shape(z_mean)[0], latent_dim), 
             mean=0.,stddev=epsilon_std)
return z_mean + K.exp(z_log_var / 2) * epsilon

z = Lambda(sampling, output_shape=(latent_dim,))([z_mean, z_log_var])
decoder_h4 = Dense(intermediate_dim4, activation = 'elu')
decoder_h3 = Dense(intermediate_dim3, activation='elu')
decoder_h2 = Dense(intermediate_dim2, activation='elu')
decoder_h1 = Dense(intermediate_dim, activation='elu')
drd = Dropout(0.7)  
decoder_mean = Dense(original_dim, activation='sigmoid')

h_decoded4 = BatchNormalization(mode = 0)(decoder_h4(z))
h_decoded3 = decoder_h3(h_decoded4)
h_decoded2 = drd(decoder_h2(h_decoded3))
h_decoded1 = decoder_h1(h_decoded2)
x_decoded_mean = decoder_mean(h_decoded1)

def vae_loss(x, x_decoded_mean):
    xent_loss = original_dim * metrics.binary_crossentropy(x,
           x_decoded_mean)
    kl_loss = - 0.5 * K.sum(1 + z_log_var - K.square(z_mean) - 
            K.exp(z_log_var), axis=-1)
    return K.mean(xent_loss + kl_loss)

vae = Model(x, x_decoded_mean)
vae.compile(optimizer=Adam(lr = 0, decay = 0), loss=vae_loss, metrics= 
      `enter code here`["categorical_accuracy","top_k_categorical_accuracy"])

Tags: logvarh2meanh1activationh4h3