我正在尝试在keras中训练自动编码器。 在某个时候,培训程序开始出错。
不幸的是,我没有跟踪开发情况。但是我知道错误必须在这里
def __compile_models__(self):
metrics_factory = MetricsFactory()
loss = [metrics_factory.ReconstructionLoss()]*1
metrics = {'decoder1_output': metrics_factory.RSquareMetrics()}#,
#'decoder2_output': metrics_factory.RSquareMetrics(),
#'decoder3_output': metrics_factory.RSquareMetrics(),
#'decoder4_output': metrics_factory.RSquareMetrics()}
optimizer = optimizers.Adam(lr=0.001, beta_1=.99, beta_2=.999, epsilon=1e-8)
self.autoencoder.compile(optimizer, loss, metrics)
def __get_callbacks__(self):
log = callbacks.CSVLogger(self.model_name+'_training.log')
sbm = callbacks.ModelCheckpoint(filepath=self.model_name+'_best.w',
save_weights_only=True, save_best_only=True)
return [log, sbm]
def train(self, x_train, x_test, iters=1000, epochs=100):
self.__compile_models__()
callbacks = self.__get_callbacks__()
self.autoencoder.fit_generator(
generator=x_train,
steps_per_epoch=iters,
epochs=epochs,
callbacks=callbacks,
validation_data=x_test,
validation_steps=220)
self.autoencoder.save_weights(self.model_name+'_last.w')
发生的事情是,即使数据集相同,我在训练和测试之间也存在巨大差异。
220/220 [==============================] - 725s 3s/step -
loss: 5174.9836 - metrics: 0.5704 -
val_loss: 214298.1528 - val_metrics: -16.9736
据我所知,网络本身的培训和测试之间没有区别(例如,辍学,正则化...)
你们中有人遇到同样的问题吗?