当前位置: 首页 > 面试题库 >

如何将Keras损失输出记录到文件

谷梁建中
2023-03-14
问题内容

当您运行Keras神经网络模型时,您可能会在控制台中看到以下内容:

Epoch 1/3
   6/1000 [..............................] - ETA: 7994s - loss: 5111.7661

随着时间的流逝,损失有望改善。我想将这些损失随时间记录到文件中,以便我可以从中学习。我试过了:

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)

但这不起作用。我不确定在这种情况下我需要什么级别的日志记录。

我也尝试过使用如下回调:

def generate_train_batch():
    html" target="_blank">while 1:
        for i in xrange(0,dset_X.shape[0],3):
            yield dset_X[i:i+3,:,:,:],dset_y[i:i+3,:,:]

class LossHistory(keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self.losses = []

    def on_batch_end(self, batch, logs={}):
        self.losses.append(logs.get('loss'))
logloss=LossHistory()
colorize.fit_generator(generate_train_batch(),samples_per_epoch=1000,nb_epoch=3,callbacks=['logloss'])

但这显然不是在写文件。无论采用哪种方法,通过回调或日志记录模块或其他任何方法,我都想听听您的解决方案,用于将keras神经网络丢失记录到文件中。谢谢!


问题答案:

有一个简单的解决方案来解决您的问题。每次使用任何一种fit方法-结果都会返回称为 History Callback
的特殊回调。它具有一个字段history,该字段是每个时期后注册的所有度量的字典。因此,可以在每个时期之后轻松获得损失函数值的列表:

history_callback = model.fit(params...)
loss_history = history_callback.history["loss"]

将此类列表保存到文件很容易(例如,通过将其转换为numpy数组并使用savetxt方法)。

更新:

尝试:

import numpy
numpy_loss_history = numpy.array(loss_history)
numpy.savetxt("loss_history.txt", numpy_loss_history, delimiter=",")

更新2:

在Keras回调文档的“ 创建回调”
段落中编写了每批记录后记录损失的问题的解决方案。



 类似资料:
  • 我知道如何在控制台中用Java创建日志消息: 但是,我目前正在开发一个Web应用程序(在netbeans IDE中)。遗憾的是,在 Web 应用中,无法将记录器输出到控制台。 因此,我想直接输出到一个文件。 我试过一些方法,但没用。例如,我尝试了以下方法: > 使用 java.util.logging.Logger 时如何在文本文件中写入日志 https://examples.javacodege

  • 问题内容: 我对jdk日志记录配置有疑问。我有一个使用JDK Logging输出消息的EJB(已部署到glassfish中)。因此,我使用具有以下代码的命名记录器: 我知道可以通过将以下行添加到Glassfish的logging.properties文件中来为记录器配置日志级别: 但是,如何为记录器指定输出文件?我想将来自名为“ org.imixs.workflow”的记录器的所有消息放入单独的文

  • 问题内容: 我找不到Keras如何定义“准确性”和“损失”。我知道我可以指定不同的指标(例如mse,交叉熵),但是keras会打印出标准的“准确性”。如何定义?同样对于损失:我知道我可以指定不同类型的正则化- 损失中的那些正则化吗? 理想情况下,我想打印出用于定义它的公式;如果没有,我会在这里解决。 问题答案: 看一下,您可以在其中找到所有可用指标的定义,包括不同类型的准确性。除非在编译模型时将其

  • 问题 你希望将单元测试的输出写到到某个文件中去,而不是打印到标准输出。 解决方案 运行单元测试一个常见技术就是在测试文件底部加入下面这段代码片段: import unittest class MyTest(unittest.TestCase): pass if __name__ == '__main__': unittest.main() 这样的话测试文件就是可执行的,并且会将

  • 我想将gradle脚本中的所有控制台输出记录到日志文件中: 但是我的gradle脚本提示用户参数: 因此,我有一个NullPointerException: 有人知道这种情况的解决方案或变通方法吗?

  • 问题内容: Go语言中有没有办法记录到不同级别的多个输出? 我希望有一个程序可以同时在Info级别记录到stdout并在带有时间戳的调试级别记录一个文件。 就像我每次编写代码一样: 我可以看到控制台打印: 和一个文件: 我使用logrus和glog,但是找不到此功能。还有其他包装或我可以编码的东西吗? 问题答案: Go-logging支持不同的日志记录后端,例如文件,syslog等。可以设置多个后