Keras 联合优化自动编码器和全连接网络进行分类

Keras 联合优化自动编码器和全连接网络进行分类,keras,deep-learning,classification,autoencoder,optuna,Keras,Deep Learning,Classification,Autoencoder,Optuna,我有一大组未标记的数据和一小组标记的数据。因此,我想首先在未标记的数据上训练一个变分自动编码器,然后在标记的数据上使用编码器对三个类进行分类(连接一个完全连接的层)。为了优化超参数,我想使用Optuna 一种可能是首先优化自动编码器,然后优化完全连接的网络(分类),但随后自动编码器可能学习对分类没有意义的编码 是否有可能联合优化自动编码器和完全连接的网络 我的自动编码器如下所示(params只是一个包含params的字典): 连接到编码器的完全连接网络如下所示: latent = vae.pre

我有一大组未标记的数据和一小组标记的数据。因此,我想首先在未标记的数据上训练一个变分自动编码器,然后在标记的数据上使用编码器对三个类进行分类(连接一个完全连接的层)。为了优化超参数,我想使用Optuna

一种可能是首先优化自动编码器,然后优化完全连接的网络(分类),但随后自动编码器可能学习对分类没有意义的编码

是否有可能联合优化自动编码器和完全连接的网络

我的自动编码器如下所示(params只是一个包含params的字典):

连接到编码器的完全连接网络如下所示:

latent = vae.predict(images)[0]
inputs = Input(shape=(input_shape,), name='fc_input')
den = inputs
for i in range(len(self.params["units"])):
    den = Dense(self.params["units"][i])(den)

    den = Activation('relu')(den)

out = Dense(self.num_classes, activation='softmax')(den)

model = Model(inputs, out, name='fcnn')

optimizer = keras.optimizers.Adam(lr=self.mc.CONFIG["fcnn"]["learning_rate"], beta_1=0.9, beta_2=0.999,
                                  epsilon=1e-08, decay=self.mc.CONFIG["fcnn"]["learning_rate_decay"])

model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

    model.fit(latent, y,
            epochs=self.params["n_epochs"],
            batch_size=self.params["batch_size"],
            verbose=0,
            shuffle=True)

 y_prob = model.predict(latent)
latent = vae.predict(images)[0]
inputs = Input(shape=(input_shape,), name='fc_input')
den = inputs
for i in range(len(self.params["units"])):
    den = Dense(self.params["units"][i])(den)

    den = Activation('relu')(den)

out = Dense(self.num_classes, activation='softmax')(den)

model = Model(inputs, out, name='fcnn')

optimizer = keras.optimizers.Adam(lr=self.mc.CONFIG["fcnn"]["learning_rate"], beta_1=0.9, beta_2=0.999,
                                  epsilon=1e-08, decay=self.mc.CONFIG["fcnn"]["learning_rate_decay"])

model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

    model.fit(latent, y,
            epochs=self.params["n_epochs"],
            batch_size=self.params["batch_size"],
            verbose=0,
            shuffle=True)

 y_prob = model.predict(latent)