我正在从事一个需要在LSTM网络上进行一些工作的项目。我以前没有任何问题,而且很奇怪,我没有对代码的这一部分进行任何更改。

问题是我有回调来记录训练模型到文件(称为Logger)的过程。在on_train_end方法中,我正在调用另一个自定义函数来保存lossaccperplexity的图。但是logs方法的on_train_end参数被赋予空字典,因此on_epoch_end毫无问题。

def on_train_end(self, logs={}):
        #calculate total time
        self.train_dur = time.time()-self.train_start
        self.log.write("\n\nTotal duration: " + str(self.train_dur) + " seconds\n")
        self.log.write("*"*100+"\n")
        self.log.close()
        print("train end logs:", logs)
        self.__save_plots(logs)
        #write time to a file
        return

def on_epoch_end(self, epoch, logs={}):
        #calculate epoch time
        self.epoch_dur = time.time()-self.epoch_start
        #write epoch logs to a file
        print("epoch end logs:" , logs)
        epoch_loss_info = "\nloss: {loss} -- val_loss: {val_loss}".format(loss = logs["loss"], val_loss = logs["val_loss"])
        epoch_acc_info = "\nacc: {acc} -- val_acc: {val_acc}".format(acc = logs["acc"], val_acc = logs["val_acc"])
        epoch_ppl_info = "\nppl: {ppl} -- val_ppl: {val_ppl}\n".format(ppl=logs["ppl"], val_ppl=logs["val_ppl"])
        self.log.write("-"*100+"\n")
        self.log.write("\n\nEpoch: {epoch} took {dur} seconds \n".format(epoch=epoch+1, dur=self.epoch_dur))
        self.log.write(epoch_loss_info+epoch_acc_info+epoch_ppl_info)
        #write generations to a file
        generator = model_generator(gen_seq_len=self.gen_seq_len, by_dir=self.model_dir)
        generated_text = generator.generate()
        self.log.write("\nInput text:\t" + generated_text[:self.gen_seq_len] + "\n" )
        self.log.write("\nGenerated text:\t" + generated_text + "\n")
        self.log.write("-"*100+"\n")
        return


如下所示,每种方法中都有一个print函数,并且print("epoch end logs")打印出一个填充有适当值的dict。但是print("train end logs")打印出一个空的dict.

我还尝试从history函数返回fit_generator并尝试将其打印出来。这也带有价值。

我已经搜索了GitHubStackoverflow,但是没有看到类似的内容。

提前致谢。

最佳答案

我暂时创建了一个空字典来解决此问题,该字典包含与logs变量相同的键,并将每个纪元后的每个值附加到该字典中。因此,我没有使用在每个历元之后填充的参数self.logs,而是将其替换为logs方法中的on_train_end参数。

但是请随意回答这个奇怪的问题。

关于python - Keras-火车结束时回调未获取任何日志,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56507935/

10-12 21:36