如何从变分自动编码器模型创建编码器模型?

时间:2019-05-01 13:03:32

标签: keras

我创建了一个变体自动编码器,其工作正常,效果很好。现在我要提取编码器模型,以便将其用于降维。该怎么办?

x = Input(shape=(original_dim,))

h1 = Dense(n1, activation='relu',name='dens_1' )(x)
h2 = Dense(n2, activation='relu',name='dens_2')(h1)
h3 = Dense(n3, activation='relu',name='dens_3')(h2)
h4 = Dense(n4, activation='relu',name='dens_4')(h3)
h = Dense(n5, activation='relu',name='dens_5')(h4)

z_mu = Dense(latent_dim,activation='relu',name='dens_6')(h)
z_log_var = Dense(latent_dim,activation='relu',name='dens_7')(h)

z_mu, z_log_var = KLDivergenceLayer()([z_mu, z_log_var])
z_sigma = Lambda(lambda t: K.exp(.5*t))(z_log_var)

eps = Input(tensor=K.random_normal(stddev=epsilon_std,
                                   shape=(K.shape(x)[0], latent_dim)))
z_eps = Multiply()([z_sigma, eps])
z = Add()([z_mu, z_eps])

x_pred = decoder(z)

vae = Model(inputs=[x, eps], outputs=x_pred)

vae.compile(optimizer='adam', loss=nllfun)
vae.fit(x_train,
        x_train,
        shuffle=True,
        epochs=epochs,
        batch_size=batch_size,
        validation_data=(x_test, x_test))

1 个答案:

答案 0 :(得分:0)

您可以尝试一下,

第一个更改,z = Add(name = 'encoder_output')([z_mu, z_eps])

您可以通过检索模型,

encoder_model = Model(inputs=vae.inputs,outputs=vae.get_layer('encoder_output').output)
相关问题