Как создать модель энкодера из вариационной модели автоэнкодера? - PullRequest
0 голосов
/ 01 мая 2019

Я создал вариационный автоэнкодер, и он работал нормально с хорошим результатом.Теперь я хочу извлечь модель кодера, чтобы использовать ее для уменьшения размерности. Как я могу это сделать?

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 голосов
/ 02 мая 2019

Вы можете попробовать это,

первое изменение, z = Add(name = 'encoder_output')([z_mu, z_eps])

И вы можете получить модель,

encoder_model = Model(inputs=vae.inputs,outputs=vae.get_layer('encoder_output').output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...